service使用handler與Activity溝通的兩種方法
阿新 • • 發佈:2019-02-04
標籤:
通過之前的學習,我們知道了在主執行緒中宣告一個handler例項並實現了訊息的處理方法之後,我可以在子執行緒中用此例項向主執行緒發訊息,在處理方法中獲取訊息並更新UI。
那麼,如果我們想用handler在service中向activity檔案傳遞訊息呢?在這裡提供了兩種方法
方法一:
在想接收訊息的Activity中,把handler例項宣告為靜態的公用的,即 public static Handler handler;
由於為公用靜態的成員變數,那麼就可以以 activityname.handler.sendmessage()方式來發送訊息了
方法二:
在service中新建一個方法,傳入activity的上下文,在service中定義一個靜態的目標activity類成員變數,將得到的上下文賦予成員變數,並通過新定義的這個方法來啟動服務。
例子如下
private static foregroundactivity activity;
public static void onstar(Context c)
{
activity = (foregroundactivity) c;
Intent intent = new Intent(c,foregroundservice.class);
activity.startService(intent);
}