簡體   English   中英

AppWidget更新服務不會在正在從主機刪除的窗口小部件上停止

[英]AppWidget Update Service does not stop on Widget being Deleted from host

我想要做的是,一旦AppWidget從用戶的Android手機的主屏幕中刪除,我想停止更新AppWidget的后台服務。

這是我正在使用的代碼...不明白什么是錯的?

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

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

經過大量的研究,我終於修復了它。 我的目標是,如果從屏幕上刪除所有AppWidget實例,則停止后台服務。

這就是它做的......

  1. 使用共享首選項來切換1和0.當用戶將小部件的第一個實例放在屏幕上時,SharePref切換為1。 當從屏幕上刪除最后一個App小部件實例時,它會切換回0。

  2. @Override服務中的OnReceive方法。 偵聽這些廣播 - AppWidget已啟用(當窗口小部件的第一個實例放在屏幕上時廣播),AppWidget已禁用(當窗口小部件的最后一個實例從屏幕上移除時由OS廣播)當廣播AppWidget已禁用時調用重寫方法OnDisabled方法。

3.在@Override OnDisabled方法中調用stopService。 工作完美。

記住OnDeleted和OnDisabled之間的區別。 當刪除窗口小部件的實例時調用OnDeleted,這並不意味着要刪除的窗口小部件是最后一個。 即使屏幕上有一個小部件實例,我也希望我的服務仍然可以運行。

* 此外,如果您不想完成上述所有操作並讓Android負責服務等...請使用IntentService。 * *

我認為stopservice在服務本身中調用onDestroy。 它適用於我使用服務中的以下代碼

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

}

timer ist我在_startService void中啟動的計時器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM