你好 我正在寫一個Android小工具;我想每隔1-5分鐘更新一次以監控來自webservice的數據,但是我發現android:updatePeriodMillis不能少於30分鐘....我怎樣才能獲得這個結果的Widget?每1分鐘更新一次android小工具
感謝和問候 c。
你好 我正在寫一個Android小工具;我想每隔1-5分鐘更新一次以監控來自webservice的數據,但是我發現android:updatePeriodMillis不能少於30分鐘....我怎樣才能獲得這個結果的Widget?每1分鐘更新一次android小工具
感謝和問候 c。
爲每1分鐘呼叫註冊一次AlarmManager服務。
final Intent intent = new Intent(context, UpdateService.class);
final PendingIntent pending = PendingIntent.getService(context, 0, intent, 0);
final AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarm.cancel(pending);
long interval = 1000*60;
alarm.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(),interval, pending);
但是,將更新推送到應用程序小部件是一項昂貴的操作。每1分鐘更新一次會迫使你的「更新應用程序小部件」代碼駐留在內存中,這將永遠持續運行,這也會使電池消耗極大。
使用Handler
至sendMessageDelayed(..)
消息或postDelayed(..)
a Runner
。
new Handler().postDelayed(new Runnable() {
public void run() { ... },
60000 /* one minute */
);
接受的答案在這裏:http://stackoverflow.com/questions/5671984/android-substuting-the-click-with-a-timer/5672264#5672264給出了一個很好的例子,使用Handler和postDelayed – Maximus 2011-04-19 19:30:34
This假設你有不斷運行的代碼將會更新應用部件。這是一個有缺陷的假設或一個非常糟糕的主意。 – CommonsWare 2011-04-19 20:20:59
如果用戶的意思是桌面小部件,如android.appwidget類,那麼是的,我同意,Priyank的答案是正確的。但是,如果用戶意味着自定義視圖,例如android.widget類中的某些東西,那麼這意味着附加到Activity的View樹,這是我原來的假設。 (爲什麼哦,他們爲什麼會過載「小部件」的名字?) – Anm 2011-04-19 22:31:16
我們應該把這個代碼放在哪裏?作爲一個Android初學者,它不會幫助我... – Virthuss 2015-12-14 04:34:46
這是應該放在'onUpdate'方法嗎? – natsumiyu 2016-08-31 09:36:19
這對於Android 6.0+無法正常工作。 打盹模式通常不適用於'setRepeating()'。我嘗試了一切,即使是'setExactAndAllowWhileIdle()',每當鬧鐘響起時,它都不會關閉,或者在我想要的1分鐘後關閉太多時間。 – Nikiforos 2017-02-13 10:13:17