我对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线程中完成。
答案 0 :(得分:3)
startActivity
不是即时的。它安排活动的开始在主线程的下一个可用周期运行,因此您可以从任何地方调用它。 (但这并不一定意味着它是一个好主意。)
除了主线程之外,您不应该触摸视图层次结构。这是一个不同的问题。
答案 1 :(得分:1)
可以从任何startActivity
调用
Activity Context
方法
线程的新实例可以访问Context
,Activity
又有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