2010-11-03 59 views
3

我想要做的是一旦從用戶的Android手機的主屏幕中刪除AppWidget,我想停止更新AppWidget的後臺服務。AppWidget更新服務不會停止在從主機刪除Widget

這是我使用的代碼...不明白什麼是錯的?

@Override 
public void onDeleted(Context context, int[] appWidgetIds){ 
Intent serviceIntent = new Intent(context, UpdateService.class); 
context.stopService(serviceIntent); 
super.onDeleted(context, appWidgetIds); 
} 

任何想法?謝謝您的幫助。

+0

重寫onDisabled(上下文上下文)在這方面的幫助? – Aakash 2010-11-03 16:38:36

+0

引發任何異常? – 2010-12-06 12:57:38

+0

@ prateek-jain不會引發異常,但服務也不會停止。 – Aakash 2010-12-06 21:19:57

回答

5

了很多研究,我終於修好了之後我​​開始計時。我的目標是在所有AppWidget實例從屏幕上移除時停止後臺服務。

這是誰幹的,

  1. 用於共享偏好來切換1和0 SharePref切換到1時,小部件的第一個實例是由用戶在屏幕上放置。當應用程序窗口小部件的最後一個實例從屏幕上移除時,它會切換回0。

  2. @Override服務中的OnReceive方法。監聽這些廣播 - AppWidget Enabled(當小部件的第一個實例被放置在屏幕上時廣播),AppWidget Disabled(當widget的最後一個實例從屏幕上移除時由操作系統廣播) 當AppWidget Disabled時廣播調用重寫的方法OnDisabled方法。

3.In @Override OnDisabled方法調用stopService。完美的作品。

請記住OnDeleted和OnDisabled之間的區別。 OnDeleted在部件的實例被移除時調用,並不意味着被刪除的部件是最後一個。即使屏幕上有一個小部件實例,我也希望我的服務仍能運行。

* 此外,如果你不想做所有上述事情,讓Android照顧服務等...使用IntentService。 * *

+1

另外請記住,這是解決AppWidget框架中的一個錯誤的關鍵,該框架已經在Google組中得到了關於getAppWidgetIds()的確認,該提供了隨機值,並且無法從此方法知道您的小部件是否啓動以及是否應該更新它。所以每次更新小部件時都要檢查Shared Pref值,然後再進行更新。節省很多開銷!讓我知道是否有人想要代碼。 – Aakash 2011-02-18 18:16:51

+0

你能分享一些說明性的源代碼嗎? – pfonseca 2011-02-21 22:19:39

+0

請分享源代碼。 – UMAR 2011-10-19 07:58:47

0

我認爲停止服務在服務本身中調用onDestroy。 它爲我用下面的代碼在服務

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    timer.cancel(); 
    //Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show(); 

} 

定時器IST我在_startService無效

+0

不解決問題...試過了。 – Aakash 2010-12-13 02:07:27