#はじめに
画面Aを再起動させたい場合に、以下のように
画面A => 画面X => 画面A
「画面Xを挟まないとうまく再起動できない!」
という場合に有効なライブラリを紹介します。
そんな場合あるか?と思われた方、すみませんが
外部のプロジェクトで発生した事象ですので詳しく言えません(T_T)
ですが、覚えておくといつか役に立つライブラリだと思いますので、
頭の片隅にでも入れておいて損はないはずです!
#ProcessPhoenix
そのライブラリの名は、ProcessPhoenix !!!!!
(かっこいい。。。)
https://github.com/JakeWharton/ProcessPhoenix
URLでもおわかりの通り、
あのAndroidの神、JakeWhartonさんが書いたOSSライブラリです。
(おぉ〜!!!)
Process Phoenix facilitates restarting your application process.
プロセスフェニックスは、アプリケーションプロセスの再起動を容易にします。
名前の通り、不死鳥のようにプロセスを蘇らせるライブラリです。
使い方もとっても簡単です。
1. build.gradleに依存関係を設定
dependencies {
implementation 'com.jakewharton:process-phoenix:2.0.0'
}
2. ProcessPhoenix#triggerRebirthを実行
今回は特定のインテントで起動したいので、
val intent = Intent(context, MainActivity::class.java)
ProcessPhoenix.triggerRebirth(context, intent)
以上です!(早っ!)
#補足
ちなみに、、、
#triggerRebirthの定義は次のようになっています。
public static void triggerRebirth(Context context, Intent... nextIntents) {
Intent intent = new Intent(context, ProcessPhoenix.class);
intent.addFlags(FLAG_ACTIVITY_NEW_TASK); // In case we are called with non-Activity context.
intent.putParcelableArrayListExtra(KEY_RESTART_INTENTS, new ArrayList<>(Arrays.asList(nextIntents)));
context.startActivity(intent);
if (context instanceof Activity) {
((Activity) context).finish();
}
Runtime.getRuntime().exit(0); // Kill kill kill!
}
これくらいの処理なら自分でもできry...
これをKotlinで書くと、スコープ関数を使えば
fun triggerRebirth(context: Context, vararg nextIntents: Intent) {
Intent(context, ProcessPhoenix::class.java).apply {
addFlags(FLAG_ACTIVITY_NEW_TASK)
putParcelableArrayListExtra(KEY_RESTART_INTENTS, ArrayList(Arrays.asList(*nextIntents)))
context.startActivity(this)
}
if (context is Activity) {
context.finish()
}
Runtime.getRuntime().exit(0)
}
このようにスッキリと書くことができます。
スコープ関数については、[コチラ] の記事を参照ください。
スマートキャストも効いてイイ感じですね。
やっぱりKotlinは書きやすい!
#おわりに
一度聞いたら忘れない名前のインパクト!