15
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Activityを再起動させたいけど余分な画面を一枚挟まないといけない…という場合に有効なライブラリ

Posted at

#はじめに

画面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に依存関係を設定

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の定義は次のようになっています。

ProcessPhoenix.java
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は書きやすい!

#おわりに
一度聞いたら忘れない名前のインパクト!

15
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?