Context摘要(二)

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摘要(二))