SyncService onCreate在同步期间一直调用

时间:2017-11-25 17:04:35

标签: android performance android-syncadapter

我刚刚开始研究在同步过程中遇到一些重大性能问题的Android应用。有一些悬而未决的成果,比如重复insert而不是bulkInsert等,但我也注意到日志中的以下内容:

11-25 11:46:02.630 10160-10160/my.package.name:sync D/mlt_SyncService: onCreate()
11-25 11:46:02.630 10160-10160/my.package.name:sync D/mlt_SyncService: Bound
11-25 11:46:02.660 10160-10160/my.package.name:sync D/mlt_SyncService: onCreate()
11-25 11:46:02.660 10160-10160/my.package.name:sync D/mlt_SyncService: Bound
11-25 11:46:02.700 10160-10160/my.package.name:sync D/mlt_SyncService: onCreate()
11-25 11:46:02.700 10160-10160/my.package.name:sync D/mlt_SyncService: Bound
11-25 11:46:02.720 10160-10160/my.package.name:sync D/mlt_SyncService: onCreate()
11-25 11:46:02.720 10160-10160/my.package.name:sync D/mlt_SyncService: Bound
11-25 11:46:02.750 10160-10160/my.package.name:sync D/mlt_SyncService: onCreate()
11-25 11:46:02.750 10160-10160/my.package.name:sync D/mlt_SyncService: Bound
11-25 11:46:02.780 10160-10160/my.package.name:sync D/mlt_SyncService: onCreate()
11-25 11:46:02.780 10160-10160/my.package.name:sync D/mlt_SyncService: Bound

......依此类推...... 这是有问题的服务:

public class SyncService extends Service {

    private static final String DEBUG_TAG = "mlt_SyncService";

    private static SyncAdapter sSyncAdapter = null;
    // Object to use as a thread-safe lock
    private static final Object sSyncAdapterLock = new Object();

    @Override
    public void onCreate() {
        synchronized (sSyncAdapterLock) {
            if (sSyncAdapter == null) {
                sSyncAdapter = new SyncAdapter(getApplicationContext(), true);
            }
            Log.d(DEBUG_TAG,"onCreate()");
        }
    }

    @Override
    public IBinder onBind(Intent intent) {
        Log.d(DEBUG_TAG,"Bound");
        return sSyncAdapter.getSyncAdapterBinder();
    }
}

那里没什么特别的。但是,似乎新的SyncService始终被实例化。我能找到的唯一服务用法是清单:

    <service
        android:name="my.package.name.sync.SyncService"
        android:exported="true"
        android:process=":sync">
        <intent-filter>
            <action android:name="android.content.SyncAdapter" />
        </intent-filter>

        <meta-data
            android:name="android.content.SyncAdapter"
            android:resource="@xml/syncadapter" />
    </service>

再一次,没有什么特别的。

似乎SyncService在每个保存的实体上实例化,但是通过该代码并没有发现任何可疑的内容,除了我们正逐一进行insert的事实一个bulkInsert,但这是一个不同的故事。此外,即使我放入断点并停止insert执行,onCreate()日志流也会继续。

我认为可能有内容观察者会在更改时触发新的同步,但并非如此。只有一个requestSync电话;在onClick听众中。

那么,为什么我的SyncService会在同步过程中一直被实例化并绑定?

感谢任何想法。

0 个答案:

没有答案