我是android开发的新手,我正在做一个需要每X次自动连接到webservice的应用程序。例如,连接以每30秒检索一次数据,而无需用户的交互。
我尝试使用android.os.Handler,但是这个Object的问题在于它是在ui线程中运行的,所以当连接花费很多时间UI冻结... 我发现这样做的唯一方法是使用asynctast并在onPostexecute()中再次调用相同的Asynctask对象,类似:
公共类ScheduledAsyncTask扩展了AsyncTasc {
doInBackground() {
Thread.sleep(30000); //30 seconds...
// connect to the server and retrieve data...
}
onPostExecute() {
// show new data to the user
ScheduledAsyncTask task = new ScheduledAsyncTask();
task.execute();
}
}
这很好但我认为不是最好的方法。欢迎提出所有建议。
提前致谢,
我身边的新例子:
我认为这是做我想做的最好的方式,请检查一下:
我的代码:
public class MainScheduledTime extends Activity实现OnClickListener {
private int counter = 0;
private int counterTemp = 0;
private TextView label;
private Button button;
private Timer timer = new Timer();
private Handler counterHandler = new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
label = (TextView) findViewById(R.id.label);
button = (Button) findViewById(R.id.button1);
button.setOnClickListener(this);
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
try {
Thread.sleep(5000); // This emulates an expensive task. For Example: call a webservice and parse the data.
counterTemp++;
setCounter(counterTemp); // This methods needs to be synchronized
counterHandler.post(counterTask);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, 0, 10000);
}
private Runnable counterTask = new Runnable() {
public void run() {
label.setText(getCounter() + "");
}
};
public synchronized int getCounter() {
return this.counter;
}
public synchronized void setCounter(int count) {
this.counter = count;
}
@Override
public void onClick(View arg0) {
}
}
答案 0 :(得分:2)
您应该在Service中进行网络服务电话。然后,您可以使用AlarmManager
安排服务执行答案 1 :(得分:0)
您可以简单地使用常规线程。
AsyncTask不适用于无限循环。