2011-09-20 50 views
2

我必須創建自定義守護進程UI線程,如果在後端有任何更新(爲了讓它更容易讓我們假設對話框應該每隔1分鐘顯示一次)就會顯示對話框。我有我的應用程序中的每個活動的父親的BaseActivity。對話應該顯示在我的任何活動中。此外,我有我的自定義SSAApplication類擴展應用程序。所以,我希望我的UI線程成爲SSAApplication類的靜態字段,並且此線程將在應用程序中啓動和停止。我想Handler應該用在我的案例中,但我不知道如何。問題是我無法理解如何從此線程顯示對話框。那麼,有沒有人可以幫助我解決問題?Android自定義守護進程UI線程

回答

1

從UI線程以外的任何位置都無法顯示對話框。這實際上是個好消息:如果可以的話,你將花費無窮無盡的時間來調試不可重現的問題!

您所要做的就是根據您的猜測,從後臺線程回報您的前端活動,並讓他們完成UI工作。

後臺線程開始工作之前,把它的回調接口:

public interface SomeListener { 
    public void onSomethingDone(Object result); 
} 

比方說,你要開始這個線程,並將它通知你回來時,它具有數據(而不是請求數據每次)。基本的(unabstracted,難看)的做法是這樣:

/* In your Activity */ 

private Handler mHandler = new Handler(); 

public void startBackgroundWork() { 
    new WorkingThread(new SomeListener() { 
     public void onSomethingDone(Object result) { 

      mHandler.post(new Runnable() { 
       public void run() { showMyDialog(result); } 
      } 

     }  
    }).start(); 
} 

然後,當然

public class WorkingThread extends Thread { 
    private SomeListener mListener; 

    public WorkingThread(SomeListener listener) { 
     mListener = listener; 
    } 

    public void run() { 
     /* do some work */ 
     mListener.onSomethingDone(result); 
    } 
} 

這樣,你的線程調用從活動的證明,保證對話的功能線。

但是,您可能會遇到其他類型的問題。這不是解決這個問題的100%正確方法。看到這篇博客文章的更多信息:

http://blogactivity.wordpress.com/2011/09/01/proper-use-of-asynctask/