Как запустить фоновую активность из виджета? - PullRequest
0 голосов
/ 23 января 2011

У меня есть виджет Android, который имеет очень простую функцию. Виджет просто запускает действие при нажатии, проходит через действие, выдает тост и закрывает действие.

Раздражает то, что когда виджет нажимается на главном экране, экран мигает, когда он открывает и закрывает действие. Есть ли способ запустить активность из фона, чтобы избежать этого мерцания? Я стараюсь сделать что-то похожее на виджет ATK, который просто всплывает после закрытия всех фоновых процессов.

Если можно просто запустить одну функцию вместо PendingIntent, это определенно сработает. Спасибо!

Ответы [ 3 ]

1 голос
/ 28 января 2011

В конце концов я сделал это, внедрив сервис вместо действия.Служба работает в фоновом режиме, а затем останавливается после завершения.PendingIntent просто запускает службу, используя метод PendingIntent getService ().

1 голос
/ 08 октября 2011

Я знаю, что очень поздно, но у меня была похожая проблема, и я не хотел пользоваться услугой.

Если ваша деятельность очень быстрая, достаточно изменить манифест и вставить ее в активность, которую будет запускать ваш виджет

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

Таким образом, ваша деятельность будет прозрачной, поэтому мерцания не будет видно и, будучи очень быстрым, она не будет мешать.

Обратите внимание, что это можно использовать только в том случае, если вы выполняете быстрые действия, иначе это приведет к зависанию.

0 голосов
/ 23 января 2011

Я делаю такие вещи, используя класс 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();
    }
}

Таким образом, в итоге у вас будет «фоновое» приложениекоторый не содержит никаких действий.Приложение будет живым, пока ваша нить жива.Из этого потока вы можете запускать все, что захотите - например, всплывающее окно, тост или любое действие - в зависимости от того, что вы хотите.

...