簡體   English   中英

Android:在服務中的timertask上更新GUI

[英]Android: update GUI at timertask within service

社區大家好

我已經在論壇上討論過我的問題,但是我不知道如何使用處理程序。

我的問題:
GUI有一個文本字段。 我創建了一個服務,它可以工作。 服務應更新UI。

我有的:

  • 方便的Android Galaxy S
  • Indigo Service Release 2

我的編碼:

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.

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