2011-01-23 6 views
0

나는 아주 간단한 기능을 가진 안드로이드 위젯을 가지고있다. 위젯은 단순히 눌렀을 때 액티비티를 시작하고, 액티비티를 실행하고, 토스트를 팝하고, 액티비티를 닫습니다.위젯에서 백그라운드 활동을 시작하는 방법은 무엇입니까?

위젯은 홈 화면에서 위젯을 누르면 화면이 열리고 닫힐 때 깜박입니다. 이 깜박 거림을 피하기 위해 백그라운드에서 활동을 시작하는 방법이 있습니까? ATK 위젯과 비슷한 것을하려고하는데, 백그라운드 프로세스를 모두 닫은 후 건배를 올리면됩니다.

PendingIntent 대신 하나의 함수 만 실행하면 가능합니다. 감사!

답변

1

결국 나는 활동 대신 서비스를 구현하여이 작업을 수행했습니다. 서비스는 백그라운드에서 실행 된 다음 완료되면 중지됩니다. PendingIntent는 단순히 PendingIntent의 getService() 메소드를 사용하여 서비스를 시작합니다.

0

저는 Application 클래스를 사용하여 이런 종류의 작업을하고 있습니다. 자신을 신고해야합니다 (예 : MyApplication 클래스 (안드로이드 매니페스트에 선언해야) 및 생성하여 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(); 
    } 
} 

그래서 결국 당신이 어떤 활동을 포함하지 않는 "배경"응용 프로그램이있을 것이다. 스레드가 살아있는 동안 응용 프로그램은 살아있을 것입니다. 이러한 스레드에서 원하는대로 시작할 수 있습니다 (예 : 팝업 창, 토스트 또는 모든 활동).

+0

액티비티에서 백그라운드에서 메소드를 실행해야하는 경우에 작동하지만, OnClickPendingIntent 메소드로 인 텐트를 실행해야하는 문제가 있습니다. 내 질문은 "OnClickPendingIntent 메서드를 사용하여 배경 의도를 시작할 수있는 방법이 있습니까?"로 번역되어야한다고 생각합니다. –

1

저는 매우 늦었지만입니다.하지만 비슷한 문제가있어서 서비스를 사용하고 싶지 않았습니다.

활동이 매우 빠른 경우

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

은 활동이 투명하게 될 것입니다이 방법은 따라서 플리커 볼 수없는 것, 매니페스트를 수정하고 위젯이 시작됩니다 활동이 점을 삽입하기에 충분 그리고 그것은 매우 빠르며 방해가되지 않을 것입니다.

활동이 빠르면이 기능을 사용할 수 있습니다. 그렇지 않으면 동작이 정지됩니다.

관련 문제