当我的Activity被推送到后台

时间:2017-01-11 19:37:34

标签: android cordova android-lifecycle

当我尝试将主要活动置于前台时,我遇到了在SecondActivity上调用OnDestroy方法的问题。在演示应用程序中不调用onDestroy方法,但是每当我将MainActivity引入前台(module1)时,onDestroy方法都会在我的主项目中调用。 使用案例:

1)启动应用程序
2)MainActivity在Foreground中运行
3)导航到SecondActivity
4)点击后退按钮 - >将MainActivity带到前台

注意:当我将MainActivity引入前台时,我不希望调用OnDestroy。 观察:我手动抛出Exception onDestroy以在我的主项目中找到Stacktrace,请在下面找到例外。一旦我将MainActivity带到前台,一旦我在MainActivity上执行任何操作,SecondActivity就会被杀死。在演示应用程序和我的项目中,我使用Cordova框架在活动之间导航..

Exception: 
01-11 18:16:43.806 29045-29045/c W/System.err:     at com.test.abc.mashup.SecondActivity.onDestroy(SecondActivity.java:240)
01-11 18:16:43.806 29045-29045/c W/System.err:     at android.app.Activity.performDestroy(Activity.java:7102)
01-11 18:16:43.806 29045-29045/c W/System.err:     at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1170)
01-11 18:16:43.806 29045-29045/c W/System.err:     at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:5039)
01-11 18:16:43.806 29045-29045/c W/System.err:     at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:5084)
01-11 18:16:43.806 29045-29045/c W/System.err:     at android.app.ActivityThread.access$1700(ActivityThread.java:221)
01-11 18:16:43.806 29045-29045/c W/System.err:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1853)
01-11 18:16:43.806 29045-29045/c W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
01-11 18:16:43.806 29045-29045/c W/System.err:     at android.os.Looper.loop(Looper.java:158)
01-11 18:16:43.806 29045-29045/c W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:7224)
01-11 18:16:43.806 29045-29045/c W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
01-11 18:16:43.806 29045-29045/c W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
01-11 18:16:43.806 29045-29045/c W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
01-11 18:16:44.931 29045-29045/c D/ViewRootImpl: #3 mView = null
01-11 18:16:44.966 29045-29045/c I/Choreogr

Module1:Manifest.xml

 <application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name" android:supportsRtl="true">
        <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
            android:label="@string/activity_name"  android:noHistory="false"
            android:screenOrientation="portrait"
            android:launchMode="singleTop" android:name="MainActivity"
            android:theme="@android:style/Theme.DeviceDefault.NoActionBar" android:windowSoftInputMode="adjustResize">
            <intent-filter android:label="@string/launcher_name">
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

模块1:主要活动

receiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                //do something based on the intent's action
                Intent  nativeIntent= new Intent(context, MainActivity.class).setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
                context.startActivity(nativeIntent);

            }
        };

Module2:Manifest.xml

    <activity
        android:launchMode="singleInstance"
        android:theme="@style/Theme.AppCompat.Light.NoActionBar"
        android:name=".SecondActivity"
        android:configChanges="screenSize|orientation">
    </activity>

模块2:第二项活动

// onBackPressed event
@Override
    public void onBackPressed() {

        Intent intent = new Intent("com.myapp.mycustomaction");
        sendBroadcast(intent);

    }

1 个答案:

答案 0 :(得分:1)

来自&#34; launchMode&#34;的文档参数:

  

A&#34; singleInstance&#34;另一方面,活动不允许任何其他活动成为其任务的一部分。它是该任务中唯一的活动。

在同一进程中启动任何其他活动将导致以下行为:

  

如果它启动另一个活动,则该活动被分配给另一个任务 - 就像FLAG_ACTIVITY_NEW_TASK在意图中一样。

请参阅:https://developer.android.com/guide/topics/manifest/activity-element.html#lmode - 它包含一个表格,显示了不同的启动模式。