在一个应用程序中调用多功能

时间:2013-10-03 07:19:36

标签: android gps orientation

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

  1. 我的外部传感器数据
  2. 方向数据
  3. GPS数据
  4. 是否可以只使用一个按钮来完成?

    这是我的代码结构

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

    这种结构是否正确? 或者是否有更有效的方法来实现这一目标?

1 个答案:

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