非Activity执行startActivity()

在 非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 ,表示新建一个任务栈
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 【Android Activity】 什么是 Activity? 四大组件之一,通常一个用户交互界面对应一个 ac...
    Rtia阅读 3,840评论 3 18
  • 2.1 Activity 2.1.1 Activity的生命周期全面分析 典型情况下的生命周期:在用户参与的情况下...
    AndroidMaster阅读 3,094评论 0 8
  • 个人总结: 一个应用程序只有一个任务栈(Stack); 一个应用程序可以有多个Task(一个Task表现于回退栈,...
    画十阅读 1,727评论 0 3
  • 清晨,在一座门前有一棵枣树和另一棵枣树的房子里醒来。微凉的雾,朦朦笼罩在这天地,霞光尚未充盈,或是他根本刺不穿这浓...
    大道似青天阅读 361评论 0 1
  • 霄云失踪 翌日天气放晴!经过上次的事情!惊雷与霄云的感情更加深厚!再加上个拖油瓶三个人每天都在一起...
    青岩颂阅读 209评论 0 0