[問題] 請問App Widget更新的問題
目前在研究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
AndroidDev 近期熱門文章
PTT數位生活區 即時熱門文章