过去一周我一直面临这个问题,但无法找到解决方案。也可以说,确切的问题也是未知的。所以我只是要发布正在发生的事情。
我有一个应用程序,允许将照片下载和上传到 Facebook。我创建了一个单独的活动(我们称之为 Tracker),它允许用户通过从我创建的数据库中读取值来管理这些下载和上传。它显示进度和上传/下载的图片数量。下载和上传在服务中执行,该服务还将值输入数据库。
问题发生如下:
当我开始下载并进入 Tracker 时,它会绑定到下载/上传服务。该服务在数据库中输入更新的值,并向 Tracker 活动发送一条消息以显示更新的值。Tracker 从数据库中读取更新的值并显示出来。但是,如果我在服务运行时退出 Tracker 并再次输入,它不会显示更新的值。跟踪器活动的所有后续重新启动都会发生这种情况,直到开始新的下载/上传。然后它也第一次成功显示了值,但从第二次重新启动开始就没有了。
在检查日志时,我发现 Tracker 在重新启动时绑定到服务并成功从数据库中读取值。该值很容易打印在日志中。但是,如果我尝试使用列表视图或文本视图在活动视图中打印值,它不会显示。视图仅刷新一次,之后不再刷新。
我一直在寻找可能的原因,但我一无所获。我一定尝试了大约 50 种解决方案,但由于我什至不知道问题的真正原因,所以没有任何效果。
请帮忙,这个错误正在延迟我的应用程序启动。
代码:
跟踪器 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();
}
跟踪器暂停:
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
trackerActive = false;
if (downloadBound) {
unbindService(dConn);
downloadBound = false;
}
}