美文网首页
Context摘要(二)

Context摘要(二)

作者: IT枫 | 来源:发表于2021-10-09 22:14 被阅读0次

    Context子类,例如ContextImpl.java中的实现,会检查有没有设置Flag:FLAG_ACTIVITY_NEW_TASK,否则会报错,这就是Application和Service中的context不可以直接启动Activity的原因。

    ```java

    @Override

        public void startActivity(Intent intent, Bundle options) {

            warnIfCallingFromSystemProcess();

            // Calling start activity from outside an activity without FLAG_ACTIVITY_NEW_TASK is

            // generally not allowed, except if the caller specifies the task id the activity should

            // be launched in. A bug was existed between N and O-MR1 which allowed this to work. We

            // maintain this for backwards compatibility.

            final int targetSdkVersion = getApplicationInfo().targetSdkVersion;

            if ((intent.getFlags() & Intent.FLAG_ACTIVITY_NEW_TASK) == 0

                    && (targetSdkVersion < Build.VERSION_CODES.N

                            || targetSdkVersion >= Build.VERSION_CODES.P)

                    && (options == null

                            || ActivityOptions.fromBundle(options).getLaunchTaskId() == -1)) {

                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);

        }

    ```

    相关文章

      网友评论

          本文标题:Context摘要(二)

          本文链接:https://www.haomeiwen.com/subject/lqscoltx.html