使用广播重启应用程序 - Android

时间:2012-03-23 11:18:42

标签: android android-layout android-intent android-widget android-ndk

我正在使用Android开源代码。我正在修改Launcher应用程序,以便可以通过应用程序更改启动器和主屏幕图标。

现在,我有一个问题。为了在应用程序中按“应用新图标”按钮后刷新启动器图标,我需要重新启动启动器 - onDestroy,然后启动onCreate。

在插入日志后观察开源工作流程,我观察到,在Locale更改期间重新启动启动器时会执行以下回调序列。

据我所知,Locale更改在某种程度上与ACTION_CONFIGURATION_CHANGED有关,每当发生时,Launcher都会使用log中给出的序列重新启动。

为了证实我在Locale上重新启动Launcher的观点,我做了以下测试。我做了'应用新图标'并检查了主屏幕,图标没有更改,然后我更改了语言并返回主屏幕,图标被更改了!此外,日志清楚地表明,在Locale更改期间重启了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 ?如果是的话,Launcher将使用我给出的日志序列重新启动,并且我在主屏幕中显示了我的新图标,我的问题已经解决。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

  

我可以显式调用广播操作ACTION_CONFIGURATION_CHANGED吗?

没有。引用the documentation,“这是一个只能由系统发送的受保护意图。”

  

如果是,将使用我给出的日志序列

重新启动Launcher

不一定。您假设广播是“我给出的日志序列”的触发器。 Correlation does not imply causation

由于您正在修改启动器,因此欢迎您回复其他应用发送的其他自定义广播Intent。然后,欢迎您通过手动重新加载可能已更改的所有内容来响应该广播。