从Android中的非主线程开始活动

时间:2015-03-02 20:15:02

标签: android thread-safety

请查看我在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启动活动?我以为这是沮丧或不可能的。好吗?

2 个答案:

答案 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);
}}