1:启动Activity:
如果我们用ApplicationContext去启动一个LaunchMode为standard的Activity的时候会报错getApplication().startActivity(new Intent(this, NewActivity.class));
, 这是因为非Activity类型的Context并没有所谓的任务栈,所以待启动的Activity就找不到栈了。解决这个问题的方法就是为待启动的Activity指定FLAG_ACTIVITY_NEW_TASK标记位,这样启动的时候就为它创建一个新的任务栈
contextImpl的startActivity()方法中options == null
这是因为在源码中有这样一段话(基于 SDK 29 源码)
在Android7.0-8.0 的中加入了options != null的判断,options是Bundle类型,正常启动Activity如果不传Bundle的时候,就不会抛出异常提醒。后来在Android9.0上又改成options == null了。
下图是sdk基于26时的源码