【问题标题】:Restarting Application using broadcast - Android使用广播重新启动应用程序 - Android
【发布时间】:2012-04-07 23:02:48
【问题描述】:

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

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

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

我了解,区域设置更改在某种程度上与 ACTION_CONFIGURATION_CHANGED 相关,每当发生这种情况时,启动器都会使用日志中给出的顺序重新启动。

为了证实我的观点,即启动器在区域设置更改时重新启动,我进行了以下测试。我做了“应用新图标”并检查了主屏幕,图标没有改变,然后我改变了语言并回到主屏幕,图标被改变了!此外,日志清楚地表明,Launcher 在 Locale 更改期间重新启动。

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 ACTION_CONFIGURATION_CHANGED 吗?如果是,启动器将使用我提供的日志序列重新启动,并且我的新图标出现在主屏幕中,我的问题已解决。

非常感谢任何帮助。

【问题讨论】:

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


    【解决方案1】:

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

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

    如果是,Launcher 将使用我给出的日志序列重新启动

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

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

    【讨论】:

    • 谢谢commonsware,我明白了。我广播的自定义意图和更改语言的 ACTION_CONFIGURATION_CHANGED 之间的共同点是,两者都调用启动器。对于“应用新图标”启动器重启案例,在使用日志观察语言更改的工作流程后,我精确地按照语言更改启动器重启的每一步,并将相同的应用于图标更改案例。
    • 但不幸的是,以下是我得到的日志序列,表明它总是转到 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[RESUMED] app.idle/true ...resumeTopActivityLocked 01-01 00:03:37.804: DEBUG/Launcher(564): ****Inside onResume()****。而在语言更改的情况下,它遵循顺序 onRetainNonConfigurationInstance()、onDestroy()、onCreate()
    猜你喜欢
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    相关资源
    最近更新 更多