Android: невозможно ли управлять загрузкой данных 2+ мероприятий через один таймер

1

У меня есть 4 действия. В каждом действии один таймер я использовал для загрузки данных каждую минуту. теперь я использую 4 таймера в 4 действиях. Теперь я хочу, возможно ли управлять всеми 4 действиями, загружаемыми данными с одного таймера.? если это возможно, укажите пример.

Благодаря....

Теги:
performance
timer

1 ответ

2

Да, вы можете сделать это в фоновом режиме и нажимать обновления для своих действий либо путем обновления GUI напрямую, либо путем имплантации шаблона Observer.

У меня теперь есть полностью рабочий пример, который может помочь вам. Ок сначала создаем класс Observable, что-то вроде этого:

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]);
    }
}

Затем вы можете расширить класс Application и запустить там поток:

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, чтобы вы могли получить только один экземпляр Observable. Затем это кусок пирога для реализации Observer в ваших соответствующих действиях:

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));
    }
}

Это должно работать, и если вы захотите использовать этот шаблон в другом действии, просто не забудьте добавить Observer и переопределить метод обновления. Пожалуйста, прокомментируйте, если вы его заработаете или у вас возникли проблемы с использованием примера.

  • 0
    но здесь один таймер может контролировать 4 действия. я имею в виду, общий таймер для всех 4 действий для загрузки данных
  • 0
    Да, затем вы можете внедрить Observer в 4 действия или напрямую обновить 4 действия. Я бы пошел к Обозревателю, которому самому нужен пример для этого?
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню