请查看我在Android每周here
上找到的代码该文章中有一个方法,它是从非UI线程调用的。作者催生了另一个子线程并开始了一项活动:
private void restoreApp() {
// Restart activity
Intent i = new Intent(ctx, MyActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ctx.startActivity(i);
}
我的问题是如何通过非uiThread启动活动?我以为这是沮丧或不可能的。好吗?
答案 0 :(得分:1)
为什么你认为“这是沮丧或不可能”?毕竟这只是操作系统启动一些新活动的触发器?也许你把它与“Andoid UI toolkit is not thread-safe. So, you must not manipulate your UI from a worker thread—you must do all manipulation to your user interface from the UI thread”这个事实搞糊涂了?
答案 1 :(得分:1)
我查看了startActivityForResult
,确实可以在非UI线程上startActivity
。看来当你调用startActivity
时,它将在主线程内部运行。请注意,在主线程上执行的AOSP startActivity
调用startActivityForResult
中:
public void startActivityForResult(Intent intent, int requestCode, Bundle options) {
if (mParent == null) {
Instrumentation.ActivityResult ar =
mInstrumentation.execStartActivity(
this, mMainThread.getApplicationThread(), mToken, this,
intent, requestCode, options);
}}