0

私はAndroidのオープンソースコードを使用しています。 Launcherアプリケーションを変更して、ランチャーとホームスクリーンのアイコンをアプリケーションから変更することができます。ブロードキャストを使用してアプリケーションを再起動する - Android

ここで問題があります。アプリから「新しいアイコンを適用」ボタンを押してランチャーアイコンをリフレッシュするには、ランチャー - オンデストロイを再起動してから、onCreateを再起動する必要があります。

ログを挿入した後にオープンソースのワークフローを観察したところ、ロケールの変更中にランチャーを再起動すると、次のコールバックシーケンスが実行されることがわかりました。

ロケールの変更は何らかの形でACTION_CONFIGURATION_CHANGEDに関連しており、発生するたびにログに示されたシーケンスを使用して起動されます。

ロケールが変更されたときにLauncherが再起動されるという私の主張を実証するために、私は次のテストを行った。私は「新しいアイコンを適用する」とホーム画面をチェックし、アイコンは変更されず、次に言語を変更してホーム画面に戻り、アイコンが変更されました!また、ログにはロケールの変更中にLauncherが再起動されることが明確に示されています。

01-01 00:02:19.960: INFO/ActivityManager(264): app/com.android.launcher[RESUMED] app.idle/true ...resumeTopActivityLocked 
01-01 00:02:19.968: DEBUG/Launcher(564): ****Inside onRetainNonConfigurationInstance()**** 
01-01 00:02:19.968: DEBUG/Launcher(564): ****Inside onDestroy()**** 
01-01 00:02:19.968: DEBUG/LauncherApplication(564): setLauncher 
01-01 00:02:19.968: DEBUG/Launcher(564): ****Inside unbindWorkspaceAndHotseatItems()**** 
01-01 00:02:19.992: DEBUG/Launcher(564): ****Inside onWindowVisibilityChanged()**** 
01-01 00:02:19.992: DEBUG/Launcher(564): ****Inside updateRunning()**** autoAdvanceRunning = false 
01-01 00:02:19.992: DEBUG/Launcher(564): ****Inside onDetachedFromWindow()**** 
01-01 00:02:19.992: DEBUG/Launcher(564): ****Inside updateRunning()**** autoAdvanceRunning = false 
01-01 00:02:19.992: DEBUG/Launcher(564): ****Inside AppWidgetResetObserver()**** 
01-01 00:02:19.992: DEBUG/Launcher(564): ****Inside onCreate()**** 

私がここに持っている疑問は、外部アプリケーションからの「適用新しいアイコン」を押した後、私は明示的に放送アクションACTION_CONFIGURATION_CHANGEDを呼び出すことができますか?はいの場合、私が与えたログシーケンスを使用してランチャーが再起動され、ホーム画面に新しいアイコンが表示され、問題は解決されます。

ご迷惑をおかけして申し訳ありません。

答えて

1

私は明示的にブロードキャストアクションACTION_CONFIGURATION_CHANGEDを​​呼び出すことができますか?

the documentation

を引用号、「これは、システムによって送信することができる保護された意図です。」

はいた場合、ランチャーは、私は必ずしもそうではありません

を与えたログ・シーケンスを使用して再起動されます。あなたは放送が "私が与えたログシーケンス"の引き金だと仮定します。 Correlation does not imply causation

ランチャーを変更しているので、あなたの他のアプリが送信する他のカスタムブロードキャストIntentに応答させることもできます。変更された可能性のあるすべてのものを手動で再読み込みすることで、そのブロードキャストに応答することができます。

+0

ありがとう、私は理解しています。ブロードキャストするカスタムインテントと、言語の変更に関するACTION_CONFIGURATION_CHANGEDが共通しているのは、どちらもランチャーを起動することです。 「新しいアイコンを適用する」ランチャーの再起動の場合、言語変更のログを使用してワークフローを観察した後、言語変更のランチャ再起動のための1ステップごとに正確に従い、アイコン変更ケースにも同じことを適用しました。 – user264953

+0

残念ながら、次のログシーケンスは、常にonResume()になります。01-01 00:03:37.796:DEBUG/Launcher(564):**** inside updateRunning()*** * autoAdvanceRunning = false 01-01 00:03:37.804:INFO/ActivityManager(264):app/com.android.launcher [再開] app.idle/true ... resumeTopActivityLocked 01-01 00:03:37.804: DEBUG/Launcher(564):****内部onResume()**** '。言語の変更の場合は、onRetainNonConfigurationInstance()、onDestroy()、onCreate()の順番に従います。 – user264953

+0

コメント/提案はありますか? – user264953

関連する問題