Android 在不同的线程中开始

Android 在不同的线程中开始,android,Android,我对安卓非常陌生。希望这不是一个愚蠢的问题 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); new Thread(new Runnable() { public void run() { Intent

我对安卓非常陌生。希望这不是一个愚蠢的问题

protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    new Thread(new Runnable()
    {
        public void run()
        {
            Intent intent = new Intent(MainActivity.this, SecondActivity.class);
            startActivity(intent);
        }
    }).start();
}
问:为什么这样做有效?从辅助线程调用startActivity是否正常


我认为所有与UI相关的事情都必须在UI线程中完成。

startActivity
不是即时的。它将活动的开始时间安排为在主线程上的下一个可用周期运行,因此您可以从任何地方调用它。(不过,这并不一定意味着这是个好主意。)

除了主线程之外,您不应该在任何地方接触视图层次结构。那是另一个问题


startActivity
方法可以从任何
活动上下文调用

线程的新实例可以访问
上下文
,而上下文又有一个
活动
。这就是您的代码工作的原因

请注意,如果从
活动外部调用此方法
上下文
,则
意图
必须包括
标志活动新任务
发射旗。这是因为,没有从现有的
活动
,没有可放置新活动的现有任务 因此,它需要被置于自己的独立任务中

如果没有找到运行给定意图的
活动
,此方法将抛出
ActivityNotFoundException


有关详细信息,请阅读
。run()
在当前线程上运行代码。您应该调用
.start()
在新线程上运行它。不回答问题,但至少让你知道这不是对你问题的真正考验。@GeorgeMulligan你是对的,但这是一个打字错误。我的意思是开始(),我的错。我不能接受道格的回答,似乎需要等9分钟。。。