当我创建新活动时,新活动是否在新线程中运行?
Log.d("testing", "before activity start");
intent = new Intent(CurrentActivity.this, SecondActivity.class); //I put "Log.d("testing","in secondActivity")" in SecondActivity.onCreate()
startActivity(intent);
Log.d("testing", "after activity start");
我认为执行的顺序是 “活动开始前” - > “in secondActivity” - > “活动开始后”
但事实上,事实并非如此。谁知道原因?那么,新活动是在新线程中运行的吗?
答案 0 :(得分:2)
不,它没有在新线程中运行。它正在UI线程中运行。 “默认情况下,单个进程中的所有应用程序代码都在主UI线程中运行。这是同样处理UI事件的线程。唯一的例外是处理来自其他进程的IPC调用的代码。系统维护每个进程中的一个独立的事务线程池,用于调度所有传入的IPC调用。开发人员应为任何长时间运行的代码创建单独的线程,以避免阻塞主UI线程。“ http://developer.android.com/resources/faq/framework.html
答案 1 :(得分:0)
它在同一个线程中运行(与应用中的所有活动一样),但是在startActivity
调用中未创建活动。在幕后,框架为您的所有活动提供了一个循环,其中包含待处理操作的消息队列。消息队列接收有关用户输入和状态更改的消息,并且每次循环时,它处理队列中的下一个输入,可能调用Activity
或View
回调之一(例如{{} 1}})。
当您调用onTouchEvent
时,它会在主线程的消息队列中将该请求排入队列。函数返回后,循环稍后将从队列中获取该请求,创建活动,并调用startActivity
和所有其他生命周期回调。这就是为什么在函数返回之后才看到onCreate
被调用的原因。
顺便说一句,这就是为什么你还需要注意你的回调没有太长时间来执行或阻塞:只有在它们返回后,线程的循环才能处理来自队列的其他请求,例如用户输入。