我已经实现了一个同步适配器,我想在我的活动中完成回调.我尝试过使用ContentResolver.addStatusChangeListener,但是当同步处于暂挂/活动状态时,我只会收到回调.以下是我的活动中的一些相关代码:
@Override
protected void onResume() {
super.onResume();
final int mask = ContentResolver.SYNC_OBSERVER_TYPE_ACTIVE | ContentResolver.SYNC_OBSERVER_TYPE_PENDING;
syncObserverHandle = ContentResolver.addStatusChangeListener(mask, syncStatusObserver);
}
@Override
protected void onPause() {
super.onPause();
if (syncObserverHandle != null) {
ContentResolver.removeStatusChangeListener(syncObserverHandle);
syncObserverHandle = null;
}
}
private SyncStatusObserver syncStatusObserver = new SyncStatusObserver() {
@Override
public void onStatusChanged(int which) {
AccountManager am = AccountManager.get(TodosActivity.this);
Account a = am.getAccountsByType(Const.ACCOUNT_TYPE)[0];
Log.d(Const.TAG, "Sync status changed: " + which);
if (!ContentResolver.isSyncActive(a, DataProvider.AUTHORITY) &&
!ContentResolver.isSyncPending(a, DataProvider.AUTHORITY)) {
Log.d(Const.TAG, "Sync finished, should refresh nao!!");
} …Run Code Online (Sandbox Code Playgroud) 我记得读过同步适配器的广播接收器接口或同步进度事件的一些ResultReceiver.SyncAdapter模式中是否有内置的东西,或者是自己种植的?
我正在开发一个Android应用程序,它与服务器执行后台同步(使用SyncAdapter和身份验证等).
启动前台应用程序(使用UI)时,可能正在进行后台同步,或者可选择通过UI按钮启动后台同步.
我想要一种"插入"正在进行的后台同步(无论是由系统启动,还是定期同步设置或UI)的方法,并显示它在前台活动中的进度.
ContentResolver文档(http://developer.android.com/reference/android/content/ContentResolver.html)提到了一个神秘的"SyncObserver",它没有链接到javadoc,也没有记录(我能找到).
还有一些其他页面提到它(http://www.chinaup.org/docs/migrating/m5-0.9/changes/android.content.ContentResolver.html)但我无法找到更多相关信息.
有人实施过这种野兽吗?
如果没有,是否有人有关于跟踪前台活动中后台同步进度的示例代码或建议?
user-interface android synchronization sync android-syncadapter
我在我的SyncAdapter中使用了cancelRequest(),就在它退出线程之前,但我决定只打算用另一个想要取消正在进行同步的实体(UI)(花太长时间,哎呀,等等.)
现在我的同步认为总有一个待处理请求 - 我用它来忽略新请求.
我要做的另一件事是Service中的侦听器线程正在侦听ContactsContract.AUTHORITY的更改,以便它可以启动我的聚合的同步.
更新:此侦听器线程正在泄漏.当我完成它时,我发出了一个.stop(),然而,我认为有一个处理程序可以保持活动并使服务停止运行.
我想将SyncResults发送到一些实体(即SyncManager),它跟踪这些事情以进行待处理,回收等.
我错过了什么?