由于某些复杂的原因,当用户按下HOME键时,我需要能够finish()我的活动。
这里的情况是,我有一个主屏幕小部件,它启动了我的应用程序的不同部分,该部分具有完全透明的活动(因此即使我的活动正在运行,主屏幕仍然保持显示)。如果以前的活动是通过Home按钮终止的,则它们将被带到前台并遮挡主屏幕。
或者作为替代方案,新活动是否可以以某种方式强制完成()以前的活动?
由于某些复杂的原因,当用户按下HOME键时,我需要能够finish()我的活动。
这里的情况是,我有一个主屏幕小部件,它启动了我的应用程序的不同部分,该部分具有完全透明的活动(因此即使我的活动正在运行,主屏幕仍然保持显示)。如果以前的活动是通过Home按钮终止的,则它们将被带到前台并遮挡主屏幕。
或者作为替代方案,新活动是否可以以某种方式强制完成()以前的活动?
那怎么办呢?
android:launchMode="singleTask"
或者
android:launchMode="singleInstance"
你的清单文件中需要添加什么?我认为singleTask
是你想要的,但我并没有完全明白你在做什么。
“系统会在一个新任务的根部创建该活动,并通过调用其onNewIntent()方法将意图路由到现有实例,而不是创建一个新的实例,但如果活动的实例已经存在,则系统会将意图路由到现有实例。” singleTask
@Override
void onPause() {
super.onPause();
finish();
}
开发文档:Activity生命周期,结束
在从主屏幕启动的活动中设置android:clearTaskOnlaunch="true"。 示例:
<activity
android:name="MainActivity"
android:exported="true"
android:clearTaskOnLaunch="true"
android:label="@string/app_name"
android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
对于主页按钮按下后的finish()我不确定,但我认为你可以使用以下方法完成前一个活动:
Intent i = new Intent(MainActivity.this, SecondActivity.class);
startActivity(i);
finish();
虽然这可能不是最好的方法。我认为你也可以调用子活动的父活动并以这种方式结束它,但不确定。
finish();
的活动。@Yossi,也许发送一个意图,你可以解释为是时候调用finish了。只是随口一想。 - eternalmatt我遇到了一个问题,当按下主页按钮时无法关闭声音。我写了下面的代码。希望能帮到你。 重写onPause()方法。
@Override
public void onPause(){
System.exit(0);
super.onPause();
}
@Override
public void onStop() {
super.onDestroy();
}