Android随手记—Android M闪退小记


编程环境

  • Android Studio 3.0.1

问题

  • MyPrivacy 在android M上闪退,在模拟器中复现.提示
    1
    android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

过程

  • 进入第二个Activity应用设置时,才出现,而且 7.1无问题.模拟器复现,抓log.

解决

  • log的意思是启动activity的context不是 activity.
  • 对应代码
    1
    2
    3
    Intent intent = new Intent(MyApplicantion.getContext(),   AppSettingActivity.class);
    intent.putExtra("PackageName", AppId);
    MyApplicantion.getContext().startActivity(intent);
  • 需要对intent声明 FLAG_ACTIVITY_NEW_TASK
    1
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

备注

  • 网上的原因分析:
  • 因为standard模式的Activity默认会进入启动它的Activity所属的任务栈中,但是由于非Activity类型的context(ApplicationContext)并没有所谓的任务栈,所以就出现问题了。需要指定Activity为FLAG_ACTIVITY_NEW_TASK标记位,这样启动的时候,就会为它创建一个新的任务栈了。–android开发艺术探究