android timertask ui,Android:TimerTask计划重复只被触发一次

好吧,这是我遇到的一个非常奇怪的问题,而且我很确定我在某个地方搞乱了,但我无法弄清楚在哪里.

我在想的是 –

>安排Timer每五秒钟执行一次TimerTask

> TimerTask依次执行AsyncTask(在这种情况下,简单地在返回AsyncTasks数量的静态计数之前休眠一秒钟).

>最后,在UI中更新上述计数.

当然,已经使用适当的Handler和Runnables将异步消息从其他线程发布到UI.

此代码仅执行一次.我希望它每5秒发射一次.这是代码.

注意:我不知道如何处理Looper.经过反复试验,我把它放在那里!

public class TimerAsyncMixActivity extends Activity {

public static final String TAG = "TimerAsyncMix";

static int executionCount = 0;

Handler mHandler = new Handler();

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

new Timer().schedule(new MyTimerTask(this), 0, 5000);

}

class MyAsyncTask extends AsyncTask{

@Override

protected Integer doInBackground(String... params) {

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return ++executionCount;

}

@Override

protected void onPostExecute(Integer result) {

mHandler.post(new UpdateUiThread(TimerAsyncMixActivity.this, result));

super.onPostExecute(result);

}

}

}

class MyTimerTask extends TimerTask{

private TimerAsyncMixActivity tma;

public MyTimerTask(TimerAsyncMixActivity tma) {

this.tma = tma;

}

@Override

public void run() {

Looper.prepare();

Log.d(TimerAsyncMixActivity.TAG, "Timer task fired");

tma.new MyAsyncTask().execute();

Looper.loop();

Looper.myLooper().quit();

}

}

class UpdateUiThread implements Runnable{

int displayCount;

TimerAsyncMixActivity tma;

public UpdateUiThread(TimerAsyncMixActivity tma, int i) {

this.displayCount = i;

this.tma = tma;

}

@Override

public void run() {

TextView tv = (TextView) tma.findViewById(R.id.tvDisplay);

tv.setText("Execution count is : "+displayCount);

}

谁能指出我做错了什么?

解决方法:

技术员,这就是我实施类似的事情.我不会声称这是最好的方式,但它对我有用,看起来并不太糟糕.

我的活动中有以下代码.我在活动开始时创建了一个异步任务,并将其停在onPause上. AsyncTask执行它需要做的任何事情,并更新onProgressUpdate()上的UI(它在UI线程上运行,因此不需要使用Handler).

private Task task;

@Override

protected void onPause() {

task.stop();

task = null;

}

@Override

protected void onResume() {

task = new Task();

task.execute();

}

private class Task extends AsyncTask {

private boolean running = true;

@Override

protected Void doInBackground(Void... params) {

while( running ) {

//fetch data from server;

this.publishProgress("updated json");

Thread.sleep(5000); // removed try/catch for readability

}

return null;

}

@Override

protected void onProgressUpdate(String... values) {

if( ! running ) {

return;

}

String json = values[0];

//update views directly, as this is run on the UI thread.

//textView.setText(json);

}

public void stop() {

running = false;

}

}

标签:android,android-asynctask,handler,timertask,looper

来源: https://codeday.me/bug/20190518/1127697.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值