Java Android如何保持方法运行?
我试图将加速器传感器的x、y、z轴数据值放在textview视图上。当我将setTextview函数放入Java Android如何保持方法运行?,java,android,multithreading,loops,methods,Java,Android,Multithreading,Loops,Methods,我试图将加速器传感器的x、y、z轴数据值放在textview视图上。当我将setTextview函数放入SensorEventListener的(接口)回调方法(名为onSensorChanged)中时,我成功地读取了实时值 据我所知,当传感器的值得到更新时,回调方法发送对象中的值,通过实现这个接口,我们可以接收这些值。不知何故,Sensor Manager(承载侦听器和事件生成方法的类)不断读取传感器值,因此我们实现的方法可以通过settext方法将值放入textview 我不明白的是,传感器
SensorEventListener的
(接口)回调方法(名为onSensorChanged
)中时,我成功地读取了实时值
据我所知,当传感器的值得到更新时,回调方法发送对象中的值,通过实现这个接口,我们可以接收这些值。不知何故,Sensor Manager(承载侦听器和事件生成方法的类)不断读取传感器值,因此我们实现的方法可以通过settext方法将值放入textview
我不明白的是,传感器管理器的方法是如何继续工作的?我曾尝试编写一个由按钮调用的方法中的循环,但我认为这些循环是无限循环,Android给出了错误并停止了应用程序。循环方法似乎没有耐心,他们试图尽快达到返回或中断。我应该用线吗?或者有没有办法创建一个保持运行的方法
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER)
return;
mSensorX = event.values[0];
mSensorY = event.values[1];
mSensorZ = event.values[2];
mSensorTimeStamp = event.timestamp;
mCpuTimeStamp = System.nanoTime();
// TextView mTextView1 = (TextView) findViewById(R.id.textView1);
// mTextView1.setText("X ekseninde " + mSensorX + " deger");
//
// TextView mTextView2 = (TextView) findViewById(R.id.textView2);
// mTextView2.setText("Y ekseninde " + mSensorY + " deger");
//
// TextView mTextView3 = (TextView) findViewById(R.id.textView3);
// mTextView3.setText("Z ekseninde " + mSensorZ + " deger");
//
// TextView mTextView4 = (TextView) findViewById(R.id.textView4);
// mTextView4.setText("Sensor TimeStamp " + mSensorTimeStamp + " time");
//
// TextView mTextView5 = (TextView) findViewById(R.id.textView5);
// mTextView5.setText("Cpu TimeStamp " + mCpuTimeStamp + " time");
}
public void startSimulation(View v) {
mLever = true;
mSimulator.startSimulation1(mLever);
}
public void stopSimulation (View v) {
mLever = false;
mSimulator.stopSimulation2();
}
class Simulator {
public boolean startSimulation1(boolean x) {
mLever = x;
if (mLever == true) {
TextView mTextView1 = (TextView) findViewById(R.id.textView1);
mTextView1.setText("X ekseninde " + mSensorX + " deger");
TextView mTextView2 = (TextView) findViewById(R.id.textView2);
mTextView2.setText("Y ekseninde " + mSensorY + " deger");
TextView mTextView3 = (TextView) findViewById(R.id.textView3);
mTextView3.setText("Z ekseninde " + mSensorZ + " deger");
TextView mTextView4 = (TextView) findViewById(R.id.textView4);
mTextView4.setText("Sensor TimeStamp " + mSensorTimeStamp + " time");
TextView mTextView5 = (TextView) findViewById(R.id.textView5);
mTextView5.setText("Cpu TimeStamp " + mCpuTimeStamp + " time");
return startSimulation1(true);
}
else
return false;
}
应用程序之前停止的原因是,您可能在主线程上进入无限循环。 尝试启动一个新线程并在其中运行循环。请记住,对UI(
setText
)的任何更新都需要在UI线程上完成。
这可以通过向UI线程的处理程序发送可运行文件来实现,如下所示:
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable(){
public void run(){
mTextView5.setText("Cpu TimeStamp " + mCpuTimeStamp + " time");
}
});