Android 2.3.4が稼働するLenovo IdeaPad A1で、いつまで経っても同期処理が終わらず、バッテリーが急速に消耗していく現象が頻発するようになった。
(このエラーを回復させるため、OSを再インストールしたが問題解消できない。 原因を調べてみた…)
Androidの設定で自動同期OFFにできない…
まず、「自動同期のチェックをON」にした状態で、全てのGoogleアカウント設定の「個別の同期のチェックをOFF」にする。その後、上の画面のページに戻り、「自動同期のチェックをOFF」とする。
これで自動同期は行われないはずだ。
しかし、WifiをONにしてしばらくすると、同期が始まり、それが終わらない… 。同期の無限ループ エラーだ。
ステータスバーに同期アイコンが表示され続ける (上の矢印で示した部分)
このようになった場合は、設定 − アカウント − “それぞれのGmailアカウント” でメニューを表示し、「同期をキャンセル」(上の画面例の下の矢印で示した部分)すれば、同期を強制中断させることができる。
毎回、こんな一時しのぎはできないし、気づかず放っておくと1日でバッテリー切れを起こしてしまう。
ログを確認し、原因がYouTubeアプリと判明
Androidのログを確認すると、YouTubeの同期が勝手に行われているだけでなく、何故かそれがエラーになって暴走している…
実際のログはこんな感じで、5分間受信操作をしハングアップ、再び受信操作を最初から…
という無限ループ状態。
03-20 20:35:00.403: D/dalvikvm(1323): GC_EXTERNAL_ALLOC freed 149K, 50% free 2927K/5767K, external 1843K/1863K, paused 29ms 03-20 20:35:04.872: I/test(1379): I will sleep ten minutes 03-20 20:35:29.294: D/GCM(1203): Message class com.google.f.a.a.i 03-20 20:35:30.536: D/SyncManager(1118): canceling and rescheduling sync because it ran too long: authority: com.google.android.youtube.provider account: Account {name=XXXXXXXXX@gmail.com, type=com.google} extras: [initialize=true ] syncSource: 2 when: 670728 expedited: false 03-20 20:35:30.567: W/YouTube(1445): apps.youtube.app.offline.sync.OfflineSyncService.onBind:28 PUDL binding sync adapter 03-20 20:35:35.614: D/dalvikvm(1203): GC_EXPLICIT freed 184K, 43% free 4251K/7431K, external 1069K/1492K, paused 41ms 03-20 20:35:38.989: D/YouTube(1445): apps.youtube.common.e.j.b:27 Executed scheduled task of type com.google.android.apps.youtube.datalib.offline.p 03-20 20:35:38.989: D/YouTube(1445): apps.youtube.common.e.j.b:27 Executed scheduled task of type com.google.android.apps.youtube.datalib.offline.p 03-20 20:35:38.997: D/YouTube(1445): apps.youtube.datalib.offline.p.a:55 Flushing offline queue. 03-20 20:35:38.997: D/YouTube(1445): apps.youtube.datalib.offline.p.a:55 Flushing offline queue. 03-20 20:35:51.044: D/SntpClient(1118): request time failed: java.net.SocketTimeoutException: Try again 03-20 20:35:51.325: W/KeyCharacterMap(1686): No keyboard for id 0 〜 中略 〜 03-20 20:40:05.176: D/dalvikvm(1426): GC_EXPLICIT freed 25K, 47% free 4220K/7879K, external 2115K/2642K, paused 40ms 03-20 20:40:30.559: D/SyncManager(1118): canceling and rescheduling sync because it ran too long: authority: com.google.android.youtube.provider account: Account {name=XXXXXXXXX@gmail.com, type=com.google} extras: [initialize=true ] syncSource: 2 when: 970747 expedited: false 03-20 20:40:30.583: W/YouTube(1445): apps.youtube.app.offline.sync.OfflineSyncService.onBind:28 PUDL binding sync adapter 03-20 20:41:00.231: D/dalvikvm(1323): GC_EXTERNAL_ALLOC freed 150K, 49% free 2959K/5767K, external 1702K/1722K, paused
まさしく、新入社員レベルのGoogleプログラマが作ったとしか思えん…
Youtubeアプリを強制削除
設定 − アプリケーション − アプリケーションの管理 ではYouTubeアプリは削除できないようなので、コマンドラインから強制削除を掛ける
# pm disable com.google.android.youtube # pm clean com.google.android.youtube # mount -o remount,rw /system /system # rm /system/app/YouTube.apk
また、/data/system/packages.xml
をviエディタなどで開き、YouTube.apkに関連する全ての行を抹消する。
YouTubeのクリーンインストールで再確認
Google PlayよりYouTubeを再インストールし、同期の無限ループに陥らないか確認したが、やはり無限ループに陥る。
一度、YouTubeを抹消した後に再インストールしたYouTubeは、通常通り設定 − アプリケーション − アプリケーションの管理からGUI上でアンインストール可能。