在 非activity环境下(比如ApplicationContext,service等)下执行startActivity(),
会报以下异常:
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)
at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:102)
Caused by: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
at android.app.ContextImpl.startActivity(ContextImpl.java:757)
at android.app.ContextImpl.startActivity(ContextImpl.java:737)
at android.content.ContextWrapper.startActivity(ContextWrapper.java:331)
at com.pq.tools.MainActivity.transform(MainActivity.java:34)
- 原因:
默认的activity的启动方式是:standard,即新打开的页面放在打开它的页面所在的任务栈中;而非activity的Context类型来打开页面,那么它是没有所谓的任务栈的,因此打开失败; - 方案:
打开页面时增加一个flag:FLAG_ACTIVITY_NEW_TASK ,表示新建一个任务栈