startActivty在另一个线程中

时间:2016-04-03 18:55:27

标签: android

我对android很新。希望这不是一个愚蠢的问题。

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线程中完成。

2 个答案:

答案 0 :(得分:3)

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

除了主线程之外,您不应该触摸视图层次结构。这是一个不同的问题。

答案 1 :(得分:1)

  可以从任何startActivity

调用

Activity Context方法

线程的新实例可以访问ContextActivity又有Activity Context。这就是你的代码工作的原因。

  

请注意,如果从Intent外部调用此方法,则FLAG_ACTIVITY_NEW_TASK必须包含Activity   发射旗帜。这是因为,没有从现有的开始   ActivityNotFoundException,没有现有任务可以放置新活动   因此需要将它放在自己独立的任务中。

如果找不到运行给定Intent的Activity,则此方法抛出$eventIds = EventVendor::where('user_id', $userId) ->where('is_active', 1)->get()->lists('event_id');

有关详情,请参阅this developer manual