如何从小部件启动后台活动?

时间:2011-01-23 02:08:57

标签: android background android-widget android-intent

我有一个Android小部件,它有一个非常简单的功能。小部件只需在按下时启动一个活动,在活动中运行,弹出一个Toast,然后关闭活动。

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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

如果您的活动非常快,则只需修改您的清单并将其插入您的小部件即将启动的活动中即可,

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

通过这种方式,您的活动将是透明的,因此不会出现闪烁现象,并且非常快,它不会妨碍。

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

答案 2 :(得分:0)

我正在使用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();
    }
}

因此,最终您将拥有不包含任何活动的“后台”应用程序。当你的线程还活着时,应用程序将处于活动状从那些线程中你可以随心所欲地开始 - 例如弹出窗口,吐司或任何活动 - 取决于你想要的。