[問題] 請問App Widget更新的問題

看板AndroidDev作者 (.....)時間12年前 (2011/09/13 19:54), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
目前在研究app widget, 書上講到如果更新太頻繁 必須要自己用thread之類的方式來更新, 我在看下列程範例式碼的時候碰到一些疑問 不知道為什麼需要在 thread中又去startservice來做更新 如果我把service中的updateAppWidget拿到onupdate或是thread部分都會出錯 請問能大概解釋一下為什麼程式需要這樣寫, 又為什麼updateAppWidget只能寫在service中咧? 感謝! public void onUpdate(final Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { Toast.makeText(context, "onUpdate", Toast.LENGTH_LONG).show(); startTimer(context); } // 下面這段是更新用的 thread public static void startTimer(final Context context){ // Set Handler final Handler handler = new Handler(); final Runnable callback = new Runnable() { public void run() { Intent intent = new Intent(context, MyService.class); context.startService(intent); } }; // Create a thread to run thread = new Thread() { @Override public void run() { try { while (true) { Thread.sleep(1000); Log.i("thread", "thread: "+new Date().toLocaleString()); handler.post(callback); } } catch (InterruptedException e) { e.printStackTrace(); } } }; thread.start(); } //MyService服務程式 public static class MyService extends Service { @Override public void onStart(Intent intent, int startId) { RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.what_time_is_it_now); remoteViews.setTextViewText(R.id.TextView01, new Date().toLocaleString()); ComponentName thisWidget = new ComponentName(this, WhatTimeIsItNow.class); AppWidgetManager manager = AppWidgetManager.getInstance(this); manager.updateAppWidget(thisWidget, remoteViews); } @Override public IBinder onBind(Intent intent) { return null; } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.128.110.82
文章代碼(AID): #1ERqHlYJ (AndroidDev)