Whi*_*ble 9 android application-shutdown application-restart android-activity
我有一个应用程序在其首次启动的活动中启动远程服务.然后,在另一个活动中,用户可以设置应用程序的配置.请注意,第二个活动不受服务约束,我不想绑定它.
现在我的问题是:在更改配置设置后,如何从第二个活动重新启动整个应用程序?
现在,我正在使用onClickListener的按钮:
public void onClick(DialogInterface dialog, int which) {
sauvegarde();
Intent i = getBaseContext().getPackageManager().getLaunchIntentForPackage(getBaseContext().getPackageName());
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
Run Code Online (Sandbox Code Playgroud)
问题是:它只在不关闭整个应用程序的情况下重新启动当前活动,因此无需重新启动服务
有任何想法吗?
您可以使用Androids系统AlarmManager,如下所示:
在您的活动中重新启动应用的代码:
AlarmManager mgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 1000, PendingIntent.getActivity(this.getBaseContext(), 0, new Intent(getIntent()), getIntent().getFlags()));
System.exit(2);
Run Code Online (Sandbox Code Playgroud)
这里可以查看一个示例
UPDATE
正如@CommonsWare指出的那样,当你不得不重新启动它时,它是一种设计应用程序的坏方法(不好的做法).如果你真的想这样做,你可以尝试设置alarmmanager来在你杀死你自己的进程后一秒钟启动你的应用程序:
AlarmManager mgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 1000, PendingIntent.getActivity(this.getBaseContext(), 0, new Intent(getIntent()), getIntent().getFlags()));
android.os.Process.killProcess(android.os.Process.myPid());
Run Code Online (Sandbox Code Playgroud)
试试这个代码,
public void onClick(DialogInterface dialog, int which) {
sauvegarde();
restart(2);
}
Run Code Online (Sandbox Code Playgroud)
重启方法
public void restart(int delay) {
Intent launchIntent = new Intent(context, YourStartUpActivity.class);
PendingIntent intent = PendingIntent.getActivity(getApplicationContext(), 0, launchIntent , 0);
AlarmManager manager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
manager.set(AlarmManager.RTC, System.currentTimeMillis() + delay, intent);
System.exit(2);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11313 次 |
| 最近记录: |