[Android] Activityを restart させる

Activityを再起動させたいと思うことが時々あります。リセットしたい場合などです。これは以前はPendingIntent, AlarmManager を使えば可能でしたが、Intentで自身を再起動させる方法が使えます。
 

Android Studio
2021.2.1




Restart

 
例えばこのようにIntentを発行して起動させることができます。

ただし、finish()以外にTaskの処理などどのように終了させるかが選べます。

finishAffinity()

finishAfterTransition()

finishAndRemoveTask()

こちらが参考になります
How do I programmatically “restart” an Android app?
 

 

サンプルコード

 
MainActivity.java

activity_main.xml

strings.xml

 

AlarmManager, PendingIntent

 
Android 8までは、AlarmManager, PendingIntent を使って再起動できました。
但し、バックグラウンドで実行されているアプリに対してアクティビティを開始できる状況に制限ができました。
バックグラウンドからのアクティビティの起動に関する制限
そのためAlarmMangerでの再起動はできなくなりましたが、Android 8まではこのようにやることができました。

アプリを再起動させたいので、Activityの遷移と同じようにして遷移先を自分自身にしてIntentを使うとどうでしょうか。
 

 
Activityの画面遷移のようにしてもうまく行きません。不安定な動きになります。
 
一度終了させ、onDestroy()にさせてからAlarmManagerを使って再起動させるとうまくいくようではあります。
繰り返すと問題があるかもしれませんが…
 

AlarmManagerで5秒を設定してアプリの終了起動をActivityのstatusを使って観察してみます。

MainActivity.java

 
レイアウトです。ボタンがあるだけです
activity_main.xml

 
リソースです。ボタンタイトルだけですが
string.xml

 

サンプル動画

 


 
Activityのライフサイクルに沿った状態で処理されているようです。
ログを見ると
51.293 onPause()

56.304 onCreate()
アプリがDestroyされて起動するまで5.011秒かかったことになっています。

 
 
関連記事:

 
References:
AlarmManager | Android Developers
PendingIntent | Android Developers
アクティビティ | Android Developers




シェアする

  • このエントリーをはてなブックマークに追加

フォローする