[英]Android: update GUI at timertask within service
。
社區大家好
我已經在論壇上討論過我的問題,但是我不知道如何使用處理程序。
我的問題:
GUI有一個文本字段。 我創建了一個服務,它可以工作。 服務應更新UI。
我有的:
我的編碼:
public class SamsungLoc1 extends Activity implements OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_samsung_loc1);
buttonStart = (Button) findViewById(R.id.buttonStart);
buttonStop = (Button) findViewById(R.id.buttonStop);
buttonStart.setOnClickListener(this);
buttonStop.setOnClickListener(this);
TextView tv1 = (TextView) findViewById(R.id.TextView01);
tv1.setText("initial1");
}
public void onClick(View src) {
switch (src.getId()) {
case R.id.buttonStart:
startService(new Intent(this, MyService.class));
break;
case R.id.buttonStop:
Log.d(TAG, "onClick: stopping srvice");
break;
}
}
}
因此,當單擊開始按鈕時,服務MyService.class將啟動:
public class MyService extends Service {
private static final String TAG = "MyService";
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
}
@Override
public void onDestroy() {
}
@Override
public void onStart(Intent intent, int startid) {
Timer t = new Timer();
t.scheduleAtFixedRate(new TimerTask() {
// @Override
public void run() {
//Here I would like to change the textview of the UI
tv1.setText("New Information");
}
},0,300000);
}
}
好吧,我已經讀過我必須使用處理程序,但是我不知道如何使用它。 能否請請:-)給我一個代碼,該代碼是如何在服務的timertask內更改textview tv1的?
親切的問候,
安迪
服務應更新UI
不,它不會。
該服務應采取某些措施,讓您的應用的UI層了解后台發生的某些事件。 請記住,有可能不是在前台您的應用程序的UI層,如果用戶按下BACK或HOME什么的。
而且,如果您對此做出的回應是“很好,在這些情況下我將停止服務”,那么您就不需要服務了,應該刪除它。 服務背后的一點是要能夠從UI層獨立運行,對於純后台工作。
服務MyService.class啟動
不推薦使用onStart()
大約四年。 請學習現代的 Android應用開發。 使用onStartCommand()
而不是onStart()
。
我已經讀過我必須使用處理程序
雖然這是一個選擇,但這不是我的第一選擇。 還是我的第二選擇。 還是我的第三選擇。
我個人的首選將是使用第三方消息總線,例如Otto 。 我沒有方便的示例Otto應用程序,因為我尚未在書中介紹(雖然在我的待辦事項列表中排名很高)。
我的第二個選擇是使用LocalBroadcastManager
。 LocalBroadcastManager
的優點在於它位於Android支持包中(您可能已經在使用),並且其工作原理與常規系統廣播(您可能已經有經驗)非常相似。 這是使用LocalBroadcastManager
的示例項目 。
我的第三個選擇是使用實際的系統廣播,其中您的服務調用sendBroadcast()
並且您的活動在前台時已注冊了BroadcastReceiver
。 如果您想在活動中更新活動,則此功能很有用,否則將顯示Notification
, 如此示例應用程序所示。 這對於允許第三方應用程序查找有關您的事件的信息也很有用,這是前兩種解決方案所不能提供的。
雖然在某些情況下,直接使用Handler
是個好主意,但我想不出任何與Android新手有關的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.