Android应用程序被SyncAdapter杀死

Android应用程序被SyncAdapter杀死,android,android-syncadapter,Android,Android Syncadapter,我有一个SyncAdapter,它在初始登录过程(登录/注册)中被调用,处理联系人,以查找已经使用系统的用户联系人 当SyncAdapter运行时,在特定设备(Moto G)上,几乎每运行一次(10次中有9次)应用程序都会被杀死 我最初的想法是,由于设备的可用RAM有限,应用程序将被杀死。因此,我想确认这一理论: @Override public void onPerformSync(Account account, Bundle extras, String authority,

我有一个SyncAdapter,它在初始登录过程(登录/注册)中被调用,处理联系人,以查找已经使用系统的用户联系人

当SyncAdapter运行时,在特定设备(Moto G)上,几乎每运行一次(10次中有9次)应用程序都会被杀死

我最初的想法是,由于设备的可用RAM有限,应用程序将被杀死。因此,我想确认这一理论:

@Override
public void onPerformSync(Account account, Bundle extras, String authority,
                          ContentProviderClient provider, SyncResult syncResult) {
    ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();
    ActivityManager activityManager = (ActivityManager) getContext()
            .getSystemService(Context.ACTIVITY_SERVICE);
    activityManager.getMemoryInfo(mi);
    long availableMegs = mi.availMem / 1048576L;
    Log.d(TAG, "Available: " + availableMegs);
    Log.d(TAG, "Low Memory: " + mi.lowMemory);
}
结果表明RAM可能不是问题,因为日志如下所示:

03-09 11:38:34.444 19193-21339/mypackage.sandbox D/SyncAdapter: Available: 252
03-09 11:38:34.445 19193-21339/mypackage.sandbox D/SyncAdapter: Low Memory: false
进一步在日志中,我发现:

 03-09 11:38:35.233 865-1610/? I/ActivityManager: Killing 19193:mypackage.sandbox/u0a579 (adj 0): depends on provider com.android.providers.contacts/.ContactsProvider2 in dying proc android.process.acore
由于联系人应用程序/提供商被终止,应用程序似乎被终止

我不确定我在reddit上找到了多少相关信息

当我的应用程序仍在前台时,我有什么方法可以防止它被杀死? 我认为可能的一种方式是,如果我可以推迟通知联系人已被修改。它将防止联系人提供商启动并被杀死,反过来我的应用程序也不会被杀死。请参阅。如果是,我如何延迟通知

更新: 我甚至通过不更改任何联系人来确保延迟通知联系人。但问题依然存在

感谢您的帮助。
谢谢

也许你遇到了麻烦?当与意图绑定的数据占用的空间超过1MB限制时,就会发生这种情况。在日志中看到ContactsProvider,可能是因为用户的contacts数据库太大。这个异常的悲哀之处在于它发生在系统级别。你的应用程序在没有机会发现(或:报告)问题的情况下被杀死。捕获此异常的唯一方法是密切关注logcat


至于你的问题,如何防止SyncAdapter崩溃你的应用程序。您是否在单独的进程中运行SyncAdapter?如果您只是遵循示例/教程代码,那么您就是。如果没有,请在中查找android:process=“:sync”。在单独进程中运行时,SyncAdapter中的崩溃不应影响应用程序的其余部分。至少不是直接的。您的用户将看到“应用程序已崩溃”对话框,但在其他进程中运行的应用程序组件将继续正常运行

这似乎是一个常见的问题,而不是你的应用程序的问题:如果我能找到一些解决方法,那就太好了。1)除了MOTO G,其他设备上的行为是什么?2) 在
sync
过程开始之前,您的应用程序还做了什么,似乎还有其他事情正在发生,导致联系人提供商崩溃。检查您的默认联系人或SMS应用程序。它在读取联系人时会被杀死。没有别的事了。我已经在Moto G3、索尼、OnePlus、Nexus、联想和三星设备上进行了测试,效果良好。我应该在默认联系人或短信应用程序中签入什么?Thanksounds就像一个特定于小众设备的问题。该设备对您的最终产品是否太重要?创建自定义应用程序类并捕获错误(非异常)可能有助于您进行调试。我在日志中没有看到
TransactionTooLargeException
,因此无法确定这是否会终止应用程序。它应该显示在系统日志中。感谢您提供的单独流程提示,它应该可以解决我的问题。我仍然会保留这个问题,以鼓励更多的见解。谢谢!