aks*_*ath 5 android android-syncadapter
我正在编写一个Android同步适配器,基本上遇到了无限循环同步的问题.一旦同步完成,它就会重新开始.
谢谢,
问候,
阿克沙伊
@Override
public void onPerformSync(final Account account, final Bundle extras, final String authority, final ContentProviderClient provider, final SyncResult syncResult) {
Log.i("Sync result full sync = " + syncResult.fullSyncRequested);
Log.i("Sync result " + syncResult.toDebugString());
Log.i("Bundle " + extras.toString());
final CountDownLatch latch = new CountDownLatch(3);
final CachedDataReceiver globalStreamRefreshReciever = new CachedDataReceiver(null) {
@Override
protected void onComplete(int resultCode) {latch.countDown();}
@Override
protected void onError() {latch.countDown();}
};
final CachedDataReceiver newMessagesReciever = new CachedDataReceiver(null) {
@Override
protected void onComplete(int resultCode) {latch.countDown();}
@Override
protected void onError() {latch.countDown();}
};
final CachedDataReceiver getViewedMessagesReciever = new CachedDataReceiver(null) {
@Override
protected void onComplete(int resultCode) {latch.countDown();showAnyNewInboxItemAlerts(getApplicationContext());}
@Override
protected void onError() {latch.countDown();}
};
/*long currentTime = System.currentTimeMillis();
long netTime = currentTime-getLastSyncTimeStamp();
boolean shouldSync = (netTime - getSyncInterval()) >=0;
if (!shouldSync && getSyncInterval()!=Constants.INVALID_ITEM){
Log.i("Current time = " + currentTime + " last sync = " + getLastSyncTimeStamp() + " sync interval = " + getSyncInterval());
Log.i("Difference = " + (netTime - getSyncInterval()));
return;
}*/
if (user.isUserLoggedIn() && (!TextUtils.isEmpty(user.peekLoggedInUserAccountToken(null)))){
startService(api.getGlobalStream(0,10,globalStreamRefreshReciever));
startService(api.getNewMessagesInbox(newMessagesReciever));
startService(api.getViewedMessagesInbox(false, getViewedMessagesReciever));
addTimeStamp();
Log.i("in sync");
try {
latch.await(1, TimeUnit.MINUTES);
} catch (InterruptedException interruptedException) {
interruptedException.printStackTrace();
Log.e("Error in latch while sync ");
}
}
}
Run Code Online (Sandbox Code Playgroud)
jcw*_*ger 14
你在那里遗漏了很多代码,当你不告诉我们你在做什么时很难找到你的问题.
走出困境,猜测你的问题......
addTimeStamp()您创建的其中一种或各种服务是否会修改ContentProvider中存储的数据?
如果是这样,您的ContentProvider会调用ContentResolver.notifyChange(uri, null)吗?
如果是这样,您的ContentProvider会通知Android它已更改并需要同步,从而驱动循环.
API是notifyChange (Uri uri, ContentObserver observer, boolean syncToNetwork).你需要打电话notifyChange(uri, null, false);- 这表明你已经从网络中取出了一个更改,并且它不应该被推回到网络,从而打破了循环.
| 归档时间: |
|
| 查看次数: |
1923 次 |
| 最近记录: |