【发布时间】:2015-07-19 10:21:26
【问题描述】:
我尝试了很多方法来解决我的问题,但仍然没有成功。我有一个方法,它返回一个字符串值,我正在使用它来更新我屏幕上的 TextView,如下所示:
outCPU.setText(getCpuInfo());
这很好,但我需要更新这个 TextView 直到按下返回按钮。
我想我需要一个 while 循环,它在活动创建后开始,在按下后退按钮后停止。这个循环应该在一个新线程中,因为:- 我必须先加载活动并在另一个线程中执行循环,因此执行不会影响主线程和活动的加载。
正如我已经说过的,即使我花了几个小时,我也不知道如何正确地做到这一点。
有人可以告诉我一个如何完成此操作的示例吗?谢谢...!!
已编辑 - 工作中:
private Handler mHandler;
private int i;
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_systeminfo);
outCPU = (TextView) findViewById(R.id.outCPU);
outMEM = (TextView) findViewById(R.id.outMEM);
outTASKS = (TextView) findViewById(R.id.outTASKS);
i = 0;
mHandler = new Handler();
mHandler.post(mUpdate);
}
private Runnable mUpdate = new Runnable() {
@Override
public void run() {
outCPU.setText(getCpuInfo());
outMEM.setText(getMemInfo());
outTASKS.setText(getTasksInfo());
i++;
mHandler.postDelayed(this, 1000);
}
};
@Override
public void onBackPressed() {
mHandler.removeCallbacks(mUpdate);
super.onBackPressed();
Log.i("MSG", "Going back");
finish();
}
【问题讨论】:
-
能否贴出包含循环的代码
-
也许我很笨,但是为什么你有两个嵌套线程?
-
@andrew 检查我的答案
-
@JonasCz 我不太了解,但我认为它的工作原理是这样的:我需要创建一个与主线程分开运行的线程,否则它会卡在一个循环中并且没有加载活动一切都变糟了……在那个线程中我也无法对 UI 进行任何更改,所以这就是为什么存在 runOnUiThread ..
标签: java android multithreading loops while-loop