当我尝试将主要活动置于前台时,我遇到了在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);
}
答案 0 :(得分:1)
来自&#34; launchMode&#34;的文档参数:
A&#34; singleInstance&#34;另一方面,活动不允许任何其他活动成为其任务的一部分。它是该任务中唯一的活动。
在同一进程中启动任何其他活动将导致以下行为:
如果它启动另一个活动,则该活动被分配给另一个任务 - 就像FLAG_ACTIVITY_NEW_TASK在意图中一样。
请参阅:https://developer.android.com/guide/topics/manifest/activity-element.html#lmode - 它包含一个表格,显示了不同的启动模式。