2012-03-19 35 views

回答

2

是的,你可以做到這一點的背景和將更新推到你的活動或者通過直接更新GUI或植入Observer模式。

我現在有一個完全可行的例子,可以幫助你。可以先建立一個可觀察類,像這樣:

public class MyObservable extends Observable { 

    int n = 0; 

    public void setValue(int n) { 
     setChanged(); 
     notifyObservers(n); 
    } 

    public int getValue() 
    { 
     return n; 
    } 
} 

,並創建一個任務,你必須改正參數你的,我只是懶惰:)

public class MyTask extends AsyncTask 
{ 
    MyObservable observable; 
    int numberOfNotifications = 0; 

    @Override 
    protected Object doInBackground(Object... params) { 
     try { 
      this.observable = (MyObservable) params[0];   
      while (true) { 
       numberOfNotifications++; 
       int timeSinceLastUpdate = 1000*5; 
       Thread.sleep(timeSinceLastUpdate); 
       publishProgress(numberOfNotifications); 
      } 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onProgressUpdate(Object... values) {  
     observable.setValue((Integer) values[0]); 
    } 
} 

然後你可以擴展應用類,並有啓動線程:

public class StackApplication extends Application { 

    private static MyObservable myObservable; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     myObservable = new MyObservable(); 
     new MyTask().execute(myObservable); 
    } 

    public static MyObservable getObservable() { 
     return myObservable; 
    } 

} 

這裏有一點要注意的是singelton模式,以確保您只能獲得可觀察到的一個實例。 然後,它的一塊蛋糕,以實現您的相關活動的觀察報:

public class FirstActivity extends Activity implements Observer { 

    TextView tvCounter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     tvCounter = (TextView) findViewById(R.id.hello); 

     StackApplication.getObservable().addObserver(this); 
    } 

    @Override 
    public void update(Observable observable, Object data) { 
     int i = (Integer) data; 
     tvCounter.setText(Integer.toString(i)); 
    } 
} 

這應該工作,如果你不會在其他活動使用這種模式只記得添加的觀察和覆蓋更新方法。請評論,如果你得到它的工作或使用這個例子有一些問題。

+0

但在這裏,一個計時器可以控制4個活動。我的意思是,所有4個活動的普通定時器加載數據 – 2012-03-19 13:50:29

+0

是的,你可以在4個活動中實現Observer,或直接更新4個活動。我會去觀察員我的自我需要一個例子嗎? – DNRN 2012-03-19 13:56:50

+0

雅我想要一個示例來正確實施...非常感謝 – 2012-03-19 14:14:38

相關問題