- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在通过 SyncAdapter onPerformSync 发送几个改造调用,并且我试图通过通过 try/catch sleep 语句发送出去来调节 http 调用。但是,这会阻塞 UI,并且只有在所有调用完成后才会响应。
在不阻塞 UI 的情况下,在 onPerformSync 后台调节网络调用(使用 sleep 定时器)的更好方法是什么?
@Override
public void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider, SyncResult syncResult) {
String baseUrl = BuildConfig.API_BASE_URL;
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.build();
service = retrofit.create(HTTPService.class);
Call<RetroFitModel> RetroFitModelCall = service.getRetroFit(apiKey, sortOrder);
RetroFitModelCall.enqueue(new Callback<RetroFitModel>() {
@Override
public void onResponse(Response<RetroFitModel> response) {
if (!response.isSuccess()) {
} else {
List<RetroFitResult> retrofitResultList = response.body().getResults();
Utility.storeList(getContext(), retrofitResultList);
for (final RetroFitResult result : retrofitResultList) {
RetroFitReview(result.getId(), service);
try {
// Sleep for SLEEP_TIME before running RetroFitReports & RetroFitTime
Thread.sleep(SLEEP_TIME);
} catch (InterruptedException e) {
}
RetroFitReports(result.getId(), service);
RetroFitTime(result.getId(), service);
}
}
}
@Override
public void onFailure(Throwable t) {
Log.e(LOG_TAG, "Error: " + t.getMessage());
}
});
}
}
最佳答案
“onPerformSync”代码在“SyncAdapterThread”线程中执行,而不是在主 UI 线程中执行。然而,当使用回调进行异步调用时,这可能会改变(这是我们这里的情况)。
这里您使用的是 Retrofit“call.enqueue”方法的异步调用,这对线程执行有影响。此时我们需要问的问题是:
Where callback methods are going to be executed?
Please note that if Retrofit didn't already define his looper, you could have caught an exception saying that you need a looper to process callbacks. In other words, an asynchronous call needs to be in a looper thread in order to post callbacks back to the thread from where it was executed.
static class Android extends Platform {
@Override CallAdapter.Factory defaultCallAdapterFactory(Executor callbackExecutor) {
if (callbackExecutor == null) {
callbackExecutor = new MainThreadExecutor();
}
return new ExecutorCallAdapterFactory(callbackExecutor);
}
static class MainThreadExecutor implements Executor {
private final Handler handler = new Handler(Looper.getMainLooper());
@Override public void execute(Runnable r) {
handler.post(r);
}
}
}
So how to handle this situation? (the answer to your question about Retrofit use)
关于android-syncadapter - 在 SyncAdapter onPerformSync 中调节网络调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35424561/
我正在通过 SyncAdapter onPerformSync 发送几个改造调用,并且我试图通过通过 try/catch sleep 语句发送出去来调节 http 调用。但是,这会阻塞 UI,并且只有
如果账户 A 的 SyncAdapter A 在 ContactsContract.RawContacts 表中创建了原始联系人,那么账户 B 的 SyncAdapter B 是否可以更新 SyncA
Android SyncAdapter 不考虑主线程设置的静态变量值。由于静态变量在应用程序中持续存在,因此预计可以跨线程共享。但 SyncAdapter 不考虑主线程设置的那些值并采用默认值。帮助我
我在实现具有虚拟帐户和虚拟帐户身份 validator 的 Syncadapter 时遇到问题。 我的帐户 validator ,CNAuthenticator: public class CNAut
如果我通过“设置/帐户”屏幕选中复选框,我就会运行自动同步。如果我将 syncadapter.xml 中的 UserVisible 设置为 false,则无法选中该复选框。如何在没有设置屏幕选项的情况
我实现了一个简单的 syncadapter,它在 Moto G 上运行良好,但在 Nexus 7 上却不行(永远不会调用 onPerformSync) 为了测试,我像这样手动启动同步: Bundle
是否可以在应用程序未运行时在后台运行 SyncAdapter?如果服务器有任何变化,我想更新 sqlite 数据库,即使 android 应用程序没有运行? 最佳答案 这个用例的最佳实践可能是: 1)
如何从 Sync Adapter 服务(标红)获取最后更新日期? 最佳答案 很有趣。 API 将(几乎必须)在 android.content.ContentResolver 上,因为这是管理定期同步
我有一个应用程序,它使用 SyncAdapter 对远程服务器进行 REST 调用,然后使用内容提供程序将更新保存到本地 SQLLite 数据库。 我可以通过转到“帐户与同步”来触发调用,然后选择我的
我已经阅读了有关同步适配器的所有详细信息,并且我了解它是如何工作的,但是我找不到任何关于是否可以不让用户取消同步数据的信息。 例如,如果我使用 syncadapter 将我的应用程序的所有数据与服务器
我知道内容修改后 30 秒会自动同步。观察 logcat for fat 的时间更长,这证明自动同步没有发生。至少,不适用于我的自定义 SyncAdapter。 用户提供者: 用户同步适配器: 启
我已经尝试了很棒的谷歌示例来同步来自网络服务的联系人并且工作正常。这称为 SampleSyncAdapter,非常值得:http://developer.android.com/resources/s
我正在尝试编写一个 Android SyncAdapter 并且有点困惑。在同步期间(即在 onPerformSync() 中),我希望能够从远程服务器拉下数据,但也希望将数据推送到远程服务器(这是双
我们的 SyncAdapter 实现不与 android 版本 4.4.4 同步。适用于较低 API 的设备。 我们的应用使用 AbstractThreadedSyncAdapter与服务器通信。我已
我正在编写一个 Android Sync Adapter 并且基本上在无限循环中同步时遇到问题。一旦同步完成,它就会重新开始。 谢谢, 问候, 阿克谢 @Override public voi
我是 syncAdapter 的新手。我看过google IO video (讲座演示 here),我已经阅读了 2 个教程(here 和 here)。 我还尝试了教程的代码,但令人沮丧的是我无法弄清
我已经按照 SDK 中的 SimpleSyncAdapter 示例项目实现了 SyncAdapter、AccountManager 和私有(private) ContentProvider。一切正常。
我的应用程序允许人们使用和管理他们的数据,无论他们是否登录。尽管如此,由于我唯一地标识每台设备,我也想同步来 self 的匿名用户(未登录的用户)的数据。因此,我想知道在这种情况下创建匿名帐户是否是一
我正在尝试为我的 Android 应用程序创建一个 SyncAdapter,以显示来自一个特定 channel 的 YouTube 视频。这些视频是公共(public)领域的,所以我不希望用户登录、创
我目前正在开发一个依赖 SyncAdapter 从服务器刷新其内容的 android 应用程序。我基本上遵循了这些说明:https://developer.android.com/training/s
我是一名优秀的程序员,十分优秀!