Java 从启动屏幕启动活动,我应该使用run()还是runOnUiThread()?
我有一个闪屏徽标活动,在应用程序启动前显示公司名称3秒钟。我从一个线程开始主活动,下面是代码:Java 从启动屏幕启动活动,我应该使用run()还是runOnUiThread()?,java,android,multithreading,splash-screen,Java,Android,Multithreading,Splash Screen,我有一个闪屏徽标活动,在应用程序启动前显示公司名称3秒钟。我从一个线程开始主活动,下面是代码: public class Logo extends Activity { Thread t; public boolean dead = false; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.logo);
public class Logo extends Activity {
Thread t;
public boolean dead = false;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.logo);
t = new Thread() {
public void run() {
try {
Intent i = new Intent(Logo.this, Main.class);
Thread.sleep(3000);
if (!dead) {
startActivity(i);
}
finish();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
t.start();
}
主活动是从工作线程调用的,对吗?使用runOnUiThread的代码有什么不同
在调试模式下,相同的线程、相同的操作等,我看不出这段代码有什么不同。。哪个是正确的?启动一个意图,我认为这不是一个UI操作。runOnUI线程在UI线程上运行UI操作。因此,您可以使用线程rununui或normal。可能是正常的线程将在这种情况下良好。但我想建议您改用定时器。启动一个意图,我认为这不是一个UI操作。runOnUI线程在UI线程上运行UI操作。因此,您可以使用线程rununui或normal。可能是正常的线程将在这种情况下良好。但我想建议您改用计时器。您应该在doInBackground后台线程中使用AsyncTask,而不是睡眠线程此线程不是UIThread PostExecute在UI线程上运行,而不是启动新活动
private class mSplashViewer extends AsyncTask<Void,Void,Void>{
protected void doInBackground(Void params){
Thread.currentThread().sleep(3000);
return null;
}
protected void onPostExecute(){
startActivity(...);
}
}
您应该在doInBackground后台线程中使用AsyncTask,而不是睡眠线程此线程不是UIThread PostExecute在UI线程上运行,而不是启动新活动
private class mSplashViewer extends AsyncTask<Void,Void,Void>{
protected void doInBackground(Void params){
Thread.currentThread().sleep(3000);
return null;
}
protected void onPostExecute(){
startActivity(...);
}
}
老实说,我不喜欢这根线。睡觉吧。请看一下我的解决方案:
new Timer().schedule(new TimerTask() {
@Override
public void run() {
// Do your work here like... startActivity...
}
}, SPLASH_DURATION); // SPLASH_DURATION IS IN MILLISECONDS LIKE 3000
您还可以阻止用户使用back键,如下所示:
@Override
public void onBackPressed() {
// do nothing! disable user interaction!
}
老实说,我不喜欢这根线。睡觉吧。请看一下我的解决方案:
new Timer().schedule(new TimerTask() {
@Override
public void run() {
// Do your work here like... startActivity...
}
}, SPLASH_DURATION); // SPLASH_DURATION IS IN MILLISECONDS LIKE 3000
您还可以阻止用户使用back键,如下所示:
@Override
public void onBackPressed() {
// do nothing! disable user interaction!
}