gpt4 book ai didi

java - Android Runnable 让我的设备变慢

转载 作者:行者123 更新时间:2023-11-30 11:37:57 25 4
gpt4 key购买 nike

我正在尝试开发一个应用程序,它从 HTML 网页获取一些数据并每秒显示一次。

为此,我以这种方式使用可运行对象:

在 OnCreate() 方法中:

mHandler.removeCallbacks(mMuestraMensaje);
mHandler.postDelayed(mMuestraMensaje, 5000);

然后是另一种方法:

    private Runnable mMuestraMensaje = new Runnable() {
public void run() {

try {
returned = test.GetSensorData(newString);
rowTextView.setText(returned);
} catch (Exception e) {
e.printStackTrace();
}
mHandler.removeCallbacks(mMuestraMensaje);
mHandler.postDelayed(this, 500);
}
};

问题是,例如,如果我按下后退按钮,应用程序开始运行缓慢,直到我不强行关闭整个应用程序,设备运行速度太慢!

谢谢!

编辑

这是全类:

public class HttpExample extends Title {




GetMethodEx test, moredata ;
String returned;
TextView rowTextView, rowTextView2;
LinearLayout ll;
private Handler mHandler = new Handler();
String newString;


@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.httpexample);
rowTextView = (TextView)findViewById(R.id.textView2);
rowTextView2 = (TextView)findViewById(R.id.textView1);

mHandler.removeCallbacks(mMuestraMensaje);
mHandler.postDelayed(mMuestraMensaje, 5000);


Bundle extras = getIntent().getExtras();
newString = extras.getString("STRING_I_NEED");


test = new GetMethodEx();
moredata = new GetMethodEx();

try {
String name = moredata.GetName(newString);
rowTextView2.setText(name);

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

ScheduledExecutorService executor =
Executors.newSingleThreadScheduledExecutor();

executor.scheduleAtFixedRate(mMuestraMensaje , 0, 500, TimeUnit.MILLISECONDS );

}




private Runnable mMuestraMensaje = new Runnable() {
public void run() {

try {
returned = test.GetSensorData(newString);
} catch (Exception e) {
e.printStackTrace();
}
MainActivity.this.runOnUiThread(new Runnable(){
rowTextView.setText(returned);
});
}
};

最佳答案

您的程序变慢是因为您在 GUI 线程上运行线程。不建议这样做。但是,我注意到您在完成后设置文本。您可以执行以下操作。

  1. 在不同的线程中运行传感器数据收集。通过 runOnUiThread 命令更新文本。
  2. 使用AsyncTask ,这似乎是一个理想的情况。
  3. 对于这种不需要 UI 线程的常规事件,我建议使用 ScheduledExecutorService .

最简单的开始是第一个,但我会仔细考虑第二个选项。第一个选项是这样的:(注意,您需要将 MainActivity 替换为您的 Activity 名称)

ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);

executor.scheduleAtFixedRate(mMuestraMensaje , 0, 500, TimeUnit.MILLISECONDS );

private Runnable mMuestraMensaje = new Runnable() {
public void run() {

try {
returned = test.GetSensorData(newString);
} catch (Exception e) {
e.printStackTrace();
}
MainActivity.this.runOnUiThread(new Runnable(){
rowTextView.setText(returned);
});
}
};

关于java - Android Runnable 让我的设备变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13822572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com