在我的应用程序中,我正在后台服务中传输图片。对于每张图片,我在sqlite db中都有数据库条目。现在我想在主屏幕上添加一个信息区域,显示需要传输的图片数量。此区域应每10秒刷新一次,以便用户可以查看是否需要完成多少个作业。
android解决此类问题的最佳做法是什么?
由于
答案 0 :(得分:1)
您可以尝试以10秒的延迟创建方法的“递归调用”
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//do anything
}
}, 10000);
**或更好地使用以下方法
Timer t = new Timer();
void timerMethod()
{
t.schedule(new TimerTask() {
public void run() {
Log.d("timer", "timer ");
//do anything
}
}, 10000, 10000);
}
答案 1 :(得分:1)
不是每10秒手动更新一次,而是每次任务完成时更新它都会更好。只要UI线程上没有发生任务,两者就不会互相干扰。如果进度条逐渐填满(或者百分比数字逐渐上升,或者其他什么),而不是每10秒进行一次大规模更改,它也会让应用程序感觉更顺畅。
要从非UI线程更新UI,您需要使用Handler。有一个很好的例子,说明如何使用Handler在Android developer site上从服务与UI进行通信。
答案 2 :(得分:0)
使用AsyncTask
。工作进入doInBackground()
,在使用publishProgress()
的任务期间更新用户界面,使用onPostExecute()
更新任务结束时的用户界面。 AsyncTask
的优势在于它可以为您处理Handler
的创建和管理,并提供了构建代码的简洁位置。
请在此处查看我的评论,了解框架代码:preventing app from looking hung
另请阅读API:http://developer.android.com/reference/android/os/AsyncTask.html
有关AsyncTasks的教程:http://www.vogella.com/articles/AndroidPerformance/article.html#asynctask