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

时间:2018-01-15 07:47:43

标签: android service

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

2 个答案:

答案 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"