非Activity下跳转Activity的问题

来源:互联网 发布:淘宝网页用html 编辑:程序博客网 时间:2024/05/21 09:50

Service继承自ContextWrapper,ContextWrapper的startActivity最终调用的是ContextImpl的startActivity,代码如下,会先检查Intent的Flag

@Override    public void startActivity(Intent intent, Bundle options) {        warnIfCallingFromSystemProcess();        if ((intent.getFlags()&Intent.FLAG_ACTIVITY_NEW_TASK) == 0) {            throw new AndroidRuntimeException(                    "Calling startActivity() from outside of an Activity "                    + " context requires the FLAG_ACTIVITY_NEW_TASK flag."                    + " Is this really what you want?");        }        mMainThread.getInstrumentation().execStartActivity(            getOuterContext(), mMainThread.getApplicationThread(), null,            (Activity)null, intent, -1, options);    }

避免这种异常的办法是设置flag为NEW_TASK或者被启动的Acitivty启动模式设置为singleTask/singleInstance。
为什么呢,个人认为和Activity栈有关,非Activity不需要栈,所以在启动Activity的时候需要保证有创建好的栈,所以需要设置Flag或者启动模式。

0 0
原创粉丝点击