在我的应用程序中,我正在后台服务中传输图片。对于每张图片,我的 sqlite 数据库中都有数据库条目。现在我想在我的主屏幕上添加一个信息区域,显示需要传输的图片数量。该区域应每 10 秒刷新一次,以便用户可以查看是否需要完成多少作业。
android中解决此类问题的最佳实践是什么?
谢谢
在我的应用程序中,我正在后台服务中传输图片。对于每张图片,我的 sqlite 数据库中都有数据库条目。现在我想在我的主屏幕上添加一个信息区域,显示需要传输的图片数量。该区域应每 10 秒刷新一次,以便用户可以查看是否需要完成多少作业。
android中解决此类问题的最佳实践是什么?
谢谢
您可以尝试以 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);
}
与其每 10 秒手动更新一次,不如在每次任务完成时更新它。只要任务不在 UI 线程上发生,两者就不会相互干扰。如果进度条逐渐填满(或百分比数字逐渐上升,或其他),而不是每 10 秒发生一次巨大变化,它也会使应用程序感觉更流畅。
为了从非 UI 线程更新 UI,您需要使用Handler。在 Android 的开发者网站上有一个很好的例子,说明了如何使用 Handler 从服务与 UI 进行通信。
使用AsyncTask
. 工作开始doInBackground()
,在任务期间更新 UI,在任务publishProgress()
结束时更新 UI onPostExecute()
。to 的优点AsyncTask
是它Handler
为您处理创建和管理 s 并提供一个简洁的位置来构建您的代码。
在此处查看我对骨架代码的评论:防止应用程序看起来挂起
另请阅读 API:http: //developer.android.com/reference/android/os/AsyncTask.html
以及关于 AsyncTasks 的教程:http ://www.vogella.com/articles/AndroidPerformance/article.html#asynctask