Android 从服务启动的活动从头开始
我正在构建一个应用程序来测试设备上的所有硬件按钮。对于Home button,我正在启动一个服务并从该服务重新启动相同的活动,更新执行Home button测试的UI。问题是,所有以前的测试进度都会被删除,重新启动时,此活动将从头开始。例如:我按照给定的顺序执行了后退键、菜单、音量增大键和主页。当在主测试后重新启动活动时,它会将后退键、菜单和音量增大键视为未执行 当我作为一个独立的应用程序启动它时,fineapp会重新启动,之前的进度保持不变,但当我从深度链接URL启动它时,这个问题就会出现 以下是我的服务级别代码:Android 从服务启动的活动从头开始,android,service,Android,Service,我正在构建一个应用程序来测试设备上的所有硬件按钮。对于Home button,我正在启动一个服务并从该服务重新启动相同的活动,更新执行Home button测试的UI。问题是,所有以前的测试进度都会被删除,重新启动时,此活动将从头开始。例如:我按照给定的顺序执行了后退键、菜单、音量增大键和主页。当在主测试后重新启动活动时,它会将后退键、菜单和音量增大键视为未执行 当我作为一个独立的应用程序启动它时,fineapp会重新启动,之前的进度保持不变,但当我从深度链接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();
}
}
将此行添加到清单文件中的活动
android:launchMode="singleTop"
将此方法添加到同一活动
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
//do the task here to be refreshed
}
无论何时调用新的意图,它都将打开先前打开的活动。如果没有,它将打开新的活动。
阅读更多说明我通过链接解决了这个问题 我把它添加到清单中的标签中
android:launchMode="singleInstance"
谢谢你的链接。它提供了许多关于启动模式的见解。您提供的解决方案没有解决问题,但我使用上述链接解决了问题。