在我的Android应用程序中,我希望每60秒自动刷新一次。所以我试着这样做:
public void refresh_check() {
Thread myThread = new Thread()
{
int counter = 0;
@Override
public void run() {
MyActivity.this.runOnUiThread(new Runnable(){
@Override
public void run() {
while (counter < 60) {
try {
Thread.sleep(1000);
counter += 1;
System.out.println("Counter: " + counter);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
refresh();
}});
super.run();
}
};
myThread.start();
}
这适用于将计数器打印到logcat的方式,但在我的应用程序中,我得到一个黑色视图。 refresh()
只是一个带有http请求的函数,这个单独工作,所以错误必须在任何地方的线程中:/有人可以帮忙吗?
答案 0 :(得分:0)
您没有正确使用Thread
。在UI线程上运行长任务就像没有使用Thread
一样。为了达到你的需要,你应该这样做:
public void refresh_check() {
Thread myThread = new Thread()
{
int counter = 0;
@Override
public void run() {
while (counter < 60) {
try {
Thread.sleep(1000);
counter += 1;
System.out.println("Counter: " + counter); //I think this may cause exception, if it does try removing it
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
refresh(); // In refresh(), use TextView.post(runnable) to post update the TextView from outside the UI thread or use handlers
}});
super.run();
};
myThread.start();
}
另外,看看AsyncTask类,它使您能够在UI线程(doInBackground()
)之外运行长任务,并使用(onPostExecute()
)