【问题标题】:How to launch a background activity from a widget?如何从小部件启动后台活动?
【发布时间】:2011-01-23 02:08:57
【问题描述】:

我有一个功能非常简单的 android 小部件。小部件只是在按下时启动一个 Activity,运行该 Activity,弹出一个 Toast,然后关闭该 Activity。

令人讨厌的是,当在主屏幕上按下小部件时,屏幕会在打开和关闭活动时闪烁。有没有办法从后台启动活动,以避免这种闪烁?我有点想做一些类似于 ATK 小部件的东西,它只是在关闭所有后台进程后弹出一个 toast。

如果可以只运行一个函数来代替 PendingIntent,那肯定也可以。谢谢!

【问题讨论】:

    标签: android background android-widget android-intent


    【解决方案1】:

    我最终通过实现服务而不是活动来做到这一点。该服务在后台运行,然后在完成后自行停止。 PendingIntent 使用 PendingIntent 的 getService() 方法简单地启动服务。

    【讨论】:

      【解决方案2】:

      我知道我非常迟到了,但我遇到了类似的问题,我不想使用服务。

      如果您的活动非常快,修改清单并将其插入到您的小部件将启动的活动中就足够了,

      android:theme="@android:style/Theme.Translucent.NoTitleBar"
      

      这样您的活动将是透明的,因此不会看到闪烁,而且速度非常快,不会妨碍您。

      请注意,这只能在您的活动很快时使用,否则会导致冻结效果。

      【讨论】:

        【解决方案3】:

        我正在使用Application 类做这种事情。您需要声明自己的 - 例如MyApplication 类(需要在 Android 清单中声明)并在创建 MyApplication 时启动单独的线程:

        public class MyApplication()
        {
        
            // only lazy initializations here!
            public MyApplication()
            {
                super();
            }
        
        
            @Override
            public void onCreate()
            {
                super.onCreate();
                Log.d(TAG, "Starting MyApplication"+this.toString());
                Thread myThread=new MyThread();
                myThread.start();
            }
        }
        

        因此,最终您将拥有不包含任何活动的“后台”应用程序。当您的线程处于活动状态时,应用程序将处于活动状态。从这些线程中,你可以开始任何你想要的东西——例如弹出窗口、toast 或任何活动——这取决于你想要什么。

        【讨论】:

        • 如果我需要在后台从活动启动一个方法,这将起作用,但问题是我仍然需要使用 OnClickPendingIntent 方法启动一个意图。我想我的问题应该翻译为“有没有办法使用 OnClickPendingIntent 方法启动后台意图?”
        猜你喜欢
        • 1970-01-01
        • 2015-10-16
        • 2010-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多