Appの再起動機能を実現
2964 ワード
プロジェクト開発の過程でAppを再起動する機能を実現する必要があり、よく使われる実行可能な方案は以下の通りである.
1.FLAG_の使用ACTIVITY_CLEAR_TOP :
2.AlarmManagerを使用するには:
テストでは両方とも実現できることが分かったが、デフォルトで起動したactivityのlaunchModeが「standard」方式で起動しないように設定されている場合、appを再起動してactivityのメモリデータをクリアすることはできない.
現在のプロセスを直接killで削除することもできます.appは再起動し、新しいプロセスを作成します.
実はkillProcessまたはSystem.exit(0)は直接呼び出すべきではなく、プロセスはosの下部で管理され、androidシステムは自分で回収プロセスを処理します.
アプリケーションを終了したら、直接finishでactivityを落とせばいいです.
自殺サービスを使用してappを再起動する完全なコードを添付します.
補足:データのクリーンアップまたはログアウト後、ログイン画面に戻ります.
参考:androidの比較的便利なAPPを再起動する方法android Process.killProcessとSystem.exit(0)の違い
1.FLAG_の使用ACTIVITY_CLEAR_TOP :
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage(getApplication().getPackageName());
LaunchIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(LaunchIntent);
}
}, 1000);// 1
2.AlarmManagerを使用するには:
Intent intent = getPackageManager()
.getLaunchIntentForPackage(getApplication().getPackageName());
PendingIntent restartIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, PendingIntent.FLAG_ONE_SHOT);
AlarmManager mgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 1000, restartIntent); // 1
System.exit(0);
テストでは両方とも実現できることが分かったが、デフォルトで起動したactivityのlaunchModeが「standard」方式で起動しないように設定されている場合、appを再起動してactivityのメモリデータをクリアすることはできない.
現在のプロセスを直接killで削除することもできます.appは再起動し、新しいプロセスを作成します.
/** Java **/
/**System.exit(0) , System.exit(1) 0 **/
System.exit(0);
/** **/
android.os.Process.killProcess(android.os.Process.myPid());
実はkillProcessまたはSystem.exit(0)は直接呼び出すべきではなく、プロセスはosの下部で管理され、androidシステムは自分で回収プロセスを処理します.
アプリケーションを終了したら、直接finishでactivityを落とせばいいです.
自殺サービスを使用してappを再起動する完全なコードを添付します.
/**
* -- app
*/
public class KillSelfService extends Service {
private Handler handler;
public KillSelfService() {
handler = new Handler();
}
@Override
public int onStartCommand(final Intent intent, int flags, int startId) {
long stopDelayed = intent.getLongExtra("Delayed", 2000);
handler.postDelayed(new Runnable() {
@Override
public void run() {
Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage(getApplication().getPackageName());
LaunchIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(LaunchIntent);
KillSelfService.this.stopSelf();
}
}, stopDelayed);
return super.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
補足:データのクリーンアップまたはログアウト後、ログイン画面に戻ります.
Intent outIntent = new Intent(HomeActivity.this,
LoginActivity.class);
outIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK
| Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(outIntent);
参考:androidの比較的便利なAPPを再起動する方法android Process.killProcessとSystem.exit(0)の違い