如何在呈现 SplashScreen 期间 运行 MainActivity
How to run MainActivity during presenting SplashScreen
我可以找到两种实现方法 splash screen:
public class MainSplashScreen extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_splash_screen);
// METHOD 1
/****** Create Thread that will sleep for 5 seconds *************/
Thread background = new Thread() {
public void run() {
try {
// Thread will sleep for 5 seconds
sleep(5*1000);
// After 5 seconds redirect to another intent
Intent i=new Intent(getBaseContext(),MainActivity.class);
startActivity(i);
//Remove activity
finish();
} catch (Exception e) {
}
}
};
// start thread
background.start();
//METHOD 2
/*
new Handler().postDelayed(new Runnable() {
// Using handler with postDelayed called runnable run method
@Override
public void run() {
Intent i = new Intent(MainSplashScreen.this, MainActivity.class);
startActivity(i);
// close this activity
finish();
}
}, 5*1000); // wait for 5 seconds
*/
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
正如预期的那样,这两种方法都首先显示启动画面 5 秒,然后启动 MainActivity。
在我的App中,MainActivity启动起来比较耗时。因此,我在这两种方法中看到的是闪屏 5 秒,然后黑屏几秒钟(就像我不使用闪屏时一样),然后是 MainActivity。
问题是如何在启动画面显示期间启动 MainActivity。
我尝试同时定义两个线程和 运行,但结果与我不使用闪屏时完全一样。
Thread background = new Thread() {
public void run() {
try {
sleep(5*1000);
finish();
} catch (Exception e) {}
}
};
Thread mainTh = new Thread() {
public void run() {
try {
Intent i=new Intent(getBaseContext(),MainActivity.class);
startActivity(i);
} catch (Exception e) {}
}
};
mainTh.start();
background.start();
试试这个,
public class Splash extends Activity {
private static final int SPLASH_SHOW_TIME = 1000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Fabric.with(this, new Crashlytics());
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_splash);
new BackgroundSplashTask().execute();
}
private class BackgroundSplashTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... arg0) {
try {
Thread.sleep(SPLASH_SHOW_TIME);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
Intent i = new Intent(Splash.this, MainActivity.class);
startActivity(i);
finish();
}
}
}
使用 Ian Lake 的最佳实践 - [=10=]。这会在您的 activity 加载所有组件时为您提供品牌屏幕。
如果您想冻结您的应用程序 5 秒 - 这不是最好的主意,但您可以这样做。只需将 post 延迟消息发送给处理程序。在处理程序中,您将捕获消息并使用 setContent 等初始化您的 activity...
您可以使用以下代码进行切换。
Handler mHandler = new Handler();
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
startActivity(new Intent(SplashActivity.this,MainActivity.class));
finish();
}
}, 2000);
我可以找到两种实现方法 splash screen:
public class MainSplashScreen extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_splash_screen);
// METHOD 1
/****** Create Thread that will sleep for 5 seconds *************/
Thread background = new Thread() {
public void run() {
try {
// Thread will sleep for 5 seconds
sleep(5*1000);
// After 5 seconds redirect to another intent
Intent i=new Intent(getBaseContext(),MainActivity.class);
startActivity(i);
//Remove activity
finish();
} catch (Exception e) {
}
}
};
// start thread
background.start();
//METHOD 2
/*
new Handler().postDelayed(new Runnable() {
// Using handler with postDelayed called runnable run method
@Override
public void run() {
Intent i = new Intent(MainSplashScreen.this, MainActivity.class);
startActivity(i);
// close this activity
finish();
}
}, 5*1000); // wait for 5 seconds
*/
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
正如预期的那样,这两种方法都首先显示启动画面 5 秒,然后启动 MainActivity。
在我的App中,MainActivity启动起来比较耗时。因此,我在这两种方法中看到的是闪屏 5 秒,然后黑屏几秒钟(就像我不使用闪屏时一样),然后是 MainActivity。
问题是如何在启动画面显示期间启动 MainActivity。
我尝试同时定义两个线程和 运行,但结果与我不使用闪屏时完全一样。
Thread background = new Thread() {
public void run() {
try {
sleep(5*1000);
finish();
} catch (Exception e) {}
}
};
Thread mainTh = new Thread() {
public void run() {
try {
Intent i=new Intent(getBaseContext(),MainActivity.class);
startActivity(i);
} catch (Exception e) {}
}
};
mainTh.start();
background.start();
试试这个,
public class Splash extends Activity {
private static final int SPLASH_SHOW_TIME = 1000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Fabric.with(this, new Crashlytics());
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_splash);
new BackgroundSplashTask().execute();
}
private class BackgroundSplashTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... arg0) {
try {
Thread.sleep(SPLASH_SHOW_TIME);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
Intent i = new Intent(Splash.this, MainActivity.class);
startActivity(i);
finish();
}
}
}
使用 Ian Lake 的最佳实践 - [=10=]。这会在您的 activity 加载所有组件时为您提供品牌屏幕。
如果您想冻结您的应用程序 5 秒 - 这不是最好的主意,但您可以这样做。只需将 post 延迟消息发送给处理程序。在处理程序中,您将捕获消息并使用 setContent 等初始化您的 activity...
您可以使用以下代码进行切换。
Handler mHandler = new Handler();
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
startActivity(new Intent(SplashActivity.this,MainActivity.class));
finish();
}
}, 2000);