2012-03-19 37 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

相关问题