由于一个复杂的原因,当用户按下 HOME 按钮时,我需要能够完成()我的活动。
这里的故事是我有一个主屏幕小部件,它启动我的应用程序的不同部分,该部分具有完全透明的活动(因此即使我的活动正在运行,主屏幕也会继续显示)。如果之前的活动是通过主页按钮终止的,它们会被带到前台并遮住主屏幕。
或者作为替代方案,我可以让新活动以某种方式强制完成()之前的活动吗?
由于一个复杂的原因,当用户按下 HOME 按钮时,我需要能够完成()我的活动。
这里的故事是我有一个主屏幕小部件,它启动我的应用程序的不同部分,该部分具有完全透明的活动(因此即使我的活动正在运行,主屏幕也会继续显示)。如果之前的活动是通过主页按钮终止的,它们会被带到前台并遮住主屏幕。
或者作为替代方案,我可以让新活动以某种方式强制完成()之前的活动吗?
关于什么
android:launchMode="singleTask"
或者
android:launchMode="singleInstance"
在你的清单中?我认为singleTask
是你想要的,但我仍然不清楚你在做什么。
“系统在新任务的根部创建活动并将意图路由到它。但是,如果活动的实例已经存在,系统将通过调用其 onNewIntent() 方法将意图路由到现有实例,而不是而不是创造一个新的。” 单任务
@Override
void onPause() {
super.onPause();
finish();
}
在从主屏幕启动的活动上设置 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>
不确定按下主页按钮时的完成(),但我认为您可以使用完成()上一个活动:
Intent i = new Intent(MainActivity.this, SecondActivity.class);
startActivity(i);
finish();
可能不是最好的方法。我认为您也可以调用子活动的父活动并以这种方式完成它,但不确定。
我在按下主页按钮时遇到了关闭声音的问题。我在下面做了这段代码。希望对您有所帮助。覆盖 onpause() 方法。
@Override
public void onPause(){
System.exit(0);
super.onPause();
}
@Override
public void onStop() {
super.onDestroy();
}