过去一周我遇到了这个问题,但未能找到解决方案。还可以说,确切的问题也是未知的。所以我只是要发布正在发生的事情。
我有一个应用程序,允许下载和上传照片到Facebook。我创建了一个单独的活动(让我们称之为Tracker),它允许用户通过从我创建的数据库中读取值来管理这些下载和上传。它显示了上传/下载的图片的进度和数量。下载和上传在服务中执行,该服务还将值输入数据库。
问题如下:
当我开始下载并进入追踪器时,它会绑定到下载/上传服务。服务在数据库中输入更新的值,并向Tracker活动发送消息以显示更新的值。跟踪器从数据库中读取更新的值并显示它。但是,如果我从Tracker退出并在服务运行时再次输入它,则它不会显示更新的值。对于Tracker活动的所有后续重新启动,都会发生这种情况,直到新的下载/上载开始。然后它也是第一次成功显示值,但不是从第二次重新启动开始。
在检查日志时,我发现Tracker在重新启动时绑定到服务并成功从数据库中读取值。该值很容易打印在日志中。但是,如果我尝试使用listview或textview在活动视图中打印该值,则不会显示。视图只刷新一次,而不是之后。
我已经找到了可能的原因,但我什么也没想出来。我必须尝试过大约50种解决方案,但由于我甚至不知道究竟是什么导致了这个问题,所以没有任何效果。
请帮助,这个错误是推迟我的应用启动。
代码:
Tracker onResume:
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
if (isDownloadRunning() && !downloadBound) {
Intent dCommLink = new Intent(this, DownloadService.class);
dCommLink.setAction("COMM_LINK");
dCommLink.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Messenger msngr = new Messenger(handler);
dCommLink.putExtra("MESSENGER", msngr);
bindService(dCommLink, dConn, Context.BIND_AUTO_CREATE));
downloadBound = true;
}
update();
}
update()包含:
private void update() {
Cursor trackCursor = trackerDb.getValues(null);
if(trackCursor.moveToFirst())
txt.setText(trackCursor.getString(
trackCursor.getColumnIndex(TrackerDatabase.KEY_CCOUNT))
+ "/" + trackCursor.getString(trackCursor.getColumnIndex(
TrackerDatabase.KEY_TCOUNT)));
else
text.setText("");
trackCursor.close();
}
追踪器onPause:
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
trackerActive = false;
if (downloadBound) {
unbindService(dConn);
downloadBound = false;
}
}