问题大致如下,我调用了安卓的传感器并得到了在X轴的FLOAT型变量,然后利用android Handler和HandlerThread 线程实现界面组件信息的刷新,也就是刷新那个FLOAT值。但是我发现刷新值的过程很卡,感觉不流畅,我又将FLOAT保留了两位小数,结果还是不流畅,我想能不能通过一种刷新UI组建的方式使得这个变量在屏幕的输出流畅一些??
代码如下
package sensor.demo;import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;
import android.util.Log;
import android.widget.TextView;public class SensorDemoActivity extends Activity {
 private static final String TAG = "sensor";//设置LOG标签
 private  SensorManager sm;
 TextView et;
 public int flag = 0;
 public float X_lateral;
 public float Y_longitudinal;
 public float Z_vertical;
 String a;    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        et = (TextView) findViewById(R.id.tv);
        fuck.start();
        sm = (SensorManager)getSystemService(Context.SENSOR_SERVICE);//创建一个SensorManager来获取系统的传感器服务
        int sensorType = Sensor.TYPE_ACCELEROMETER;//选取加速度感应器
        sm.registerListener(myAccelerometerListener,sm.getDefaultSensor(sensorType),SensorManager.SENSOR_DELAY_NORMAL);
        //最常用的一个方法 注册事件
        //参数1 :SensorEventListener监听器
        // 参数2 :Sensor 一个服务可能有多个Sensor实现,此处调用getDefaultSensor获取默认的Sensor
        //参数3 :模式 可选数据变化的刷新频率
    }
    //SensorEventListener接口的实现,需要实现两个方法
    //方法1 onSensorChanged 当数据变化的时候被触发调用
    //onAccuracyChanged 当获得数据的精度发生变化的时候被调用,比如突然无法获得数据时
    //
    final SensorEventListener myAccelerometerListener = new SensorEventListener(){
     //复写onSensorChanged方法
     public void onSensorChanged(SensorEvent sensorEvent){
    
     if(sensorEvent.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
     Log.i(TAG,"onSensorChanged");
     //图解中已经解释三个值的含义
     X_lateral = sensorEvent.values[0];
     Y_longitudinal = sensorEvent.values[1];
     Z_vertical = sensorEvent.values[2];
     Log.i(TAG,"\n heading "+X_lateral);
     Log.i(TAG,"\n pitch "+Y_longitudinal);
     Log.i(TAG,"\n roll "+Z_vertical);
     }
     }
     //复写onAccuracyChanged方法
     public void onAccuracyChanged(Sensor sensor , int accuracy){
     Log.i(TAG, "onAccuracyChanged");
     }
    };
    
   // 很关键的部分:注意,说明文档中提到,即使activity不可见的时候,感应器依然会继续的工作,测试的时候可以发现,没有正常的刷新频率
   //也会非常高,所以一定要在onPause方法中关闭触发器,否则讲耗费用户大量电量,很不负责。 
    public void onPause(){
     sm.unregisterListener(myAccelerometerListener);
     super.onPause();
    }   
 HandlerThread fuck=new HandlerThread(""){
 public void run() {
  // TODO Auto-generated method stub
 
  while (flag>=0) {
   flag++;
   Message msg=new Message();//申明一个消息
   int ss=(int)(X_lateral*100);
   int y=(int)(Y_longitudinal*100);
   int z=(int)(Z_vertical*100);
   float sss=((float)ss)/100;      a="x="+sss;
     msg.obj=a;//将字符串a的值赋值给message的第三个参数obj

    updateBar.sendMessage(msg);//将msg的数据发送
   
  }
  
  
 }
};
 Handler updateBar = new Handler() {   @Override
  public void handleMessage(Message msg) {
   String b=(String) msg.obj;
    et.setText(b);//将接收到的数据显示到TextView中
  }
 };
 
     }
请教各位高手( ⊙ o ⊙ )啊!