Android 通过for()循环和处理程序不断更新文本
我正在为自己做一个测试项目,只是为了了解更多信息,所以现在我需要通过(;)循环,每隔250毫秒不断更新Android 通过for()循环和处理程序不断更新文本,android,loops,textview,handler,freeze,Android,Loops,Textview,Handler,Freeze,我正在为自己做一个测试项目,只是为了了解更多信息,所以现在我需要通过(;)循环,每隔250毫秒不断更新TextView的文本,它发生在单击按钮之后。。。我的问题是,每当我按下该按钮时,我的应用程序就会冻结(是的,我的按钮完全正常工作,通过之前的测试进行验证),我正在使用一个处理程序,以确保主线程在Runnable启动时不受影响。。。这是我的按钮和处理程序代码 final Handler handler = new Handler(); B3.setOnClickListener(
TextView
的文本,它发生在单击按钮之后。。。我的问题是,每当我按下该按钮时,我的应用程序就会冻结(是的,我的按钮完全正常工作,通过之前的测试进行验证),我正在使用一个处理程序,以确保主线程在Runnable
启动时不受影响。。。这是我的按钮和处理程序代码
final Handler handler = new Handler();
B3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handler.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
for(;;){
String a = Shells.sendSingleCommand("free");//Here I send a command "free" and it returns its output
text.setText(a);//text is my TextView which is used through my experimentations ...
synchronized(this){
try{
wait(250);
}catch(Exception e){
}
}
}
}
});
}
});
如果您需要更多信息,请询问:)Android不允许您在主线程中执行长任务。如果您需要这样做,我建议将for循环和depdendent代码移动到单独的线程中。Android不允许您在主线程中执行长任务。如果您需要执行类似操作,我建议将for循环和depdendent代码移动到单独的线程中。使用
处理程序.postDelayed
每250毫秒不断更新textview,而不是使用for循环
,以避免冻结当前活动,如下所示:
Handler handler=new Handler();
B3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handler.post(runnable);
}
});
Runnable runnable=new Runnable(){
@Override
public void run() {
String a = Shells.sendSingleCommand("free");
text.setText(a);
handler.postDelayed(runnable, 250);
}
};
使用
handler.postDelayed
每隔250毫秒不断更新textview,而不是使用for loop
以避免冻结当前活动,如下所示:
Handler handler=new Handler();
B3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handler.post(runnable);
}
});
Runnable runnable=new Runnable(){
@Override
public void run() {
String a = Shells.sendSingleCommand("free");
text.setText(a);
handler.postDelayed(runnable, 250);
}
};
我们都以相同的方式回答:)因此我删除了我的答案。这会导致编译错误<代码>可运行内部
可运行
声明给出了未初始化
错误。@Sudhanshu:没有得到你的解释@ρ∑ρK耶。我的Android Studio给了我一个错误runnable可能没有在处理程序行上初始化。postDelayed(…
,阻止我编译项目@ρ∑ρєK,我必须使用answer解决它。我们都以相同的方式回答:)因此我删除了我的答案。这会导致编译错误<代码>可运行
内部可运行
声明给出了未初始化
错误。@Sudhanshu:没有得到你的解释@ρ∑ρK耶。我的Android Studio在处理程序行上给了我一个错误runnable可能没有初始化。postDelayed(…
),阻止我编译项目@ρ∑ρєK,我必须使用answer解决它。