0

过去一周我一直面临这个问题,但无法找到解决方案。也可以说,确切的问题也是未知的。所以我只是要发布正在发生的事情。

我有一个应用程序,允许将照片下载和上传到 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;
  }
}
4

0 回答 0