Android 从服务启动的活动从头开始

Android 从服务启动的活动从头开始,android,service,Android,Service,我正在构建一个应用程序来测试设备上的所有硬件按钮。对于Home button,我正在启动一个服务并从该服务重新启动相同的活动,更新执行Home button测试的UI。问题是,所有以前的测试进度都会被删除,重新启动时,此活动将从头开始。例如:我按照给定的顺序执行了后退键、菜单、音量增大键和主页。当在主测试后重新启动活动时,它会将后退键、菜单和音量增大键视为未执行 当我作为一个独立的应用程序启动它时,fineapp会重新启动,之前的进度保持不变,但当我从深度链接URL启动它时,这个问题就会出现 以

我正在构建一个应用程序来测试设备上的所有硬件按钮。对于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"

谢谢你的链接。它提供了许多关于启动模式的见解。您提供的解决方案没有解决问题,但我使用上述链接解决了问题。