0

我正在使用一个应用程序,我需要在其中获取三种数据并保存它:

  1. 我的外部传感器数据
  2. 方向数据
  3. 全球定位系统数据

是否可以只使用一个按钮来做到这一点?

这是我的代码结构

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
    }

}   }   }

这个结构正确吗?还是有更有效的方法来实现这一目标?

4

1 回答 1

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更好,因为它可以帮助您在处理 Activity 生命周期时避免问题。

于 2013-10-03T07:36:00.950 回答