我正在使用一个应用程序,我需要获取三种数据并保存它:
是否可以只使用一个按钮来完成?
这是我的代码结构
private Button.OnClickListener myButton2_listener = new Button.OnClickListener() {
public void onClick(View v) {
Timer timer = new Timer();
timer.schedule(new WriteFile(), 1000, 1000);
}
};
public class WriteFile extends TimerTask {
@Override
public void run() {
// TODO Auto-generated method stub
runOnUiThread(new Runnable() {
@Override
public void run() {
VGNMData();
OriData();
GPSData();
}
private void OriData() {
//get oridata here
}
private void GPSData() {
//get GPSData here
}
private void VGNMData() {
//get VGNMData here
}
} } }
这种结构是否正确? 或者是否有更有效的方法来实现这一目标?
答案 0 :(得分:0)
我不认为这是最好的方法,因为使用另一个线程的重点是不在UI线程上工作。这可能有效:
public class WriteFile extends TimerTask {
@Override
public void run() {
VGNMData();
OriData();
GPSData();
runOnUiThread(new Runnable() {
@Override
public void run() {
// Do UI related stuff here
}
}
}
private void OriData() {
//get oridata here
}
private void GPSData() {
//get GPSData here
}
private void VGNMData() {
//get VGNMData here
}
}
但是,您应该查看AsyncTask(或AsyncTaskLoader),具体取决于这三个函数执行的时间。以下是可行的方法:
private Button.OnClickListener myButton2_listener = new Button.OnClickListener() {
public void onClick(View v) {
new AcquireDataTask().execute();
}
};
class AcquireDataTask extends AsyncTask<Object, Integer, Boolean> {
private void OriData() {
//get oridata here
}
private void GPSData() {
//get GPSData here
}
private void VGNMData() {
//get VGNMData here
}
protected Boolean doInBackground (Object... data) {
VGNMData();
OriData();
GPSData();
}
protected void onPostExecute (Boolean result) {
// Do ui stuff here
}
}
AsyncTaskLoader更好,因为它可以帮助您避免在处理活动生命周期时出现问题。