Android 使用计时器和处理程序处理UI线程
我在处理程序和timertask上有问题 当我完成处理程序以检查连接并在两个单独的线程上更新UI时,它就工作了。但是我想定期更新网络连接。也许每5秒钟执行一次。我用Timer.schedule来做这个。但应用程序失败了。 我不知道计时器是否不能进入UI线程 而且,我不知道是否有更好的方法来完成这样的多重任务。我急切地想知道是否有其他方法可以做到这一点,比如AsyncTask、Looper。多谢各位 公共类ViewPostTest扩展活动{ 私有字符串连接\u状态=nullAndroid 使用计时器和处理程序处理UI线程,android,handler,runnable,timertask,Android,Handler,Runnable,Timertask,我在处理程序和timertask上有问题 当我完成处理程序以检查连接并在两个单独的线程上更新UI时,它就工作了。但是我想定期更新网络连接。也许每5秒钟执行一次。我用Timer.schedule来做这个。但应用程序失败了。 我不知道计时器是否不能进入UI线程 而且,我不知道是否有更好的方法来完成这样的多重任务。我急切地想知道是否有其他方法可以做到这一点,比如AsyncTask、Looper。多谢各位 公共类ViewPostTest扩展活动{ 私有字符串连接\u状态=null public void
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final TextView timer_view = (TextView) findViewById(R.id.result);
final Runnable runnable = new Runnable(){
public void run() {
// TODO Auto-generated method stub
ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkinfo = manager.getActiveNetworkInfo();
if(networkinfo.isConnected())
{
connection_status = "Connected";
}
else
{
connection_status = "Disconnected";
}
timer_view.post(new Runnable(){
public void run() {
// TODO Auto-generated method stub
timer_view.setText(connection_status);
}});
}};
TimerTask task1 = new TimerTask(){
@Override
public void run() {
// TODO Auto-generated method stub
Handler handler = new Handler();
handler.post(runnable);
}};
Timer timer1 = new Timer();
timer1.schedule(task1, 0,5000);
}
}
您可以使用
handler.postDelayed(runnable,5000)
在runnable内部,所以它每5秒调用一次。我已经尝试过了。但是它只调用一次,而不是每5秒调用一次。你在runnable内部调用它吗?它现在可以工作了。但是我不明白为什么在runnable内部调用可以工作。为什么它不在线程内部创建一个新线程并创建一个无限线程。所有这些都可以工作在一个线程中画笔-主线程。当您发布runnable时,它只会将其添加到队列中,并在同一线程上运行5秒钟。