我正在构建一个应用来测试设备上的所有硬件按钮。对于Home按钮,我正在启动服务并从该服务重新启动相同的活动(更新执行主页按钮测试的UI)。问题是,测试的所有先前进度都被删除,并且当重新启动时,此活动从头开始。例如:我按照给定的顺序执行了返回键,菜单,音量增大键和主页。在主页测试后重新启动活动时,它会将后退键,菜单和音量增大键视为未执行。
当我作为一个独立的应用程序启动它时,它运行正常(应用程序重新启动以前的进度完好无损)但是当我从深层链接URL启动它时,就出现了这个问题。
以下是我的服务类代码:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
timer=new Timer();
TimerTask timerTask=new TimerTask() {
@Override
public void run() {
if(getRecentApp().equals(getLauncherPackage())){
if(VolumeKeyTest.isHomeKeyPressed) {
if(!isAppRelaunched) {
bringApplicationToFront();
}
//VolumeKeyTest.isHomeKeyPressed=false;
if(timer != null) {
timer.cancel();
timer.purge();
timer = null;
}
}
}
}
};
timer.schedule(timerTask,0,500);
//return START_STICKY_COMPATIBILITY;
return super.onStartCommand(intent, flags, startId);
}
private void bringApplicationToFront() {
Intent notificationIntent = new Intent(getApplicationContext(),VolumeKeyTest.mClass);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
timer = new Timer();
try{
pendingIntent.send();
isAppRelaunched = true;
} catch (PendingIntent.CanceledException e) {
e.printStackTrace();
}
}
答案 0 :(得分:1)
将此行添加到清单文件中的活动
android:launchMode="singleTop"
将此方法添加到同一活动
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
//do the task here to be refreshed
}
每当调用新意图时,它将打开先前打开的相同动作。如果没有,那么它将开启新的活动。 阅读更多说明https://inthecheesefactory.com/blog/understand-android-activity-launchmode/en
答案 1 :(得分:0)
我用链接解决了它 https://inthecheesefactory.com/blog/understand-android-activity-launchmode/en
我将此添加到了清单
中的<activity>
标记
android:launchMode="singleInstance"