我有以下代码。
public class SplashScreen extends Activity {
private int _splashTime = 5000;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
new Handler().postDelayed(new Thread(){
@Override
public void run(){
Intent mainMenu = new Intent(SplashScreen.this, MainMenu.class);
SplashScreen.this.startActivity(mainMenu);
SplashScreen.this.finish();
overridePendingTransition(R.drawable.fadein, R.drawable.fadeout);
}
}, _splashTime);
}
}
我在分析这段代码时遇到问题。据了解处理程序正在主线程中运行。但它有一个正在其他线程中运行的线程。
主菜单类将在主线程或第二线程中运行?
如果主要thread停止 5 秒 ANR 将升高。为什么当我延迟停止时(_splashTime)
ANR不显示(即使我将其增加到超过5秒)
据了解处理程序正在主线程中运行。
对象不在线程上运行,因为对象不运行。方法运行。
但它有一个正在其他线程中运行的线程。
您尚未发布任何涉及任何“其他线程”的代码。上面代码清单中的所有内容都与进程的主应用程序线程相关联。
MainMenu.class 将在主线程或第二线程中运行?
对象不在线程上运行,因为对象不运行。方法运行。MainMenu
似乎是一个Activity
。活动生命周期方法(例如,onCreate()
)在主应用程序线程上调用。
为什么当我延迟停止(_splashTime)时,ANR 不显示(即使我将其增加到超过 5 秒)
您不是“延迟停止[主应用程序线程]”。您已经安排了Runnable
延迟后在主应用程序线程上运行_splashTime
毫秒。然而,postDelayed()
不是阻塞调用。它只是将一个事件放入事件队列中,该事件将不会被执行_splashTime
毫秒。
另外,请更换Thread
with Runnable
, since postDelayed()
不使用Thread
。您的代码可以编译并运行,因为Thread
实施Runnable
,但是你会因为认为使用而感到困惑Thread
代替Runnable
意味着您的代码将在后台线程上运行,但事实并非如此。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)