1

すべての電話で正常に動作する Android アプリを作成しました。しかし、私のアルカテル電話では、電話がディープスリープモードになり、データネットワークに障害が発生したため、アプリはデータネットワークを取得せず、サーバーからデータを同期しません。


私のデザイン ...

SystemBootReceiver--> (DataSyncService)Service--> (MyBroadcastReceiver)BroadcastReceiver--> (MyDataService)Service.

したがって、ここでシステムの起動時に、 (繰り返し)DataSyncServiceを設定したところから開始し、 . を呼び出した後、 を呼び出して停止します。AlarmManagerMyBroadcastReceverBroadcastReceverDataSyncServicestopself()

これで、MyBroadcastReceverが を呼び出しますMyDataService


前述のように、電話がディープスリープモードになるのを防ぐWakeLocksに出くわしました。だから私はそれをMyDataService onCreate()メソッド 内に実装しました

PowerManager pm = (PowerManager) 
                    getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");
mWakeLock.acquire();

そしてrelease()、サービス停止前のウェイクロック。

Androidマニフェストにも許可を設定しました。

しかし、これはうまくいきませんでした。簡単なチェックのために、市場のWAKE LOCKアプリを使用しました。

しかし、これでも電話は起きませんでした。再び私はWAKE MY ANDROID(ストアから削除されたアプリ)アプリを市場から見つけてインストールしました..そしてここで魔法が起こりました.

それは電話を生かし続けました。

このアプリの説明によると、Wake Lock. それで、私は何が欠けていますか?

実装ミスや設計上の問題はありますか?

4

1 に答える 1

4

サービスにあるロックは実行されません-サービスが実行されないためです

まあ-WakefulIntentServiceを使用する必要があります-MyDataService拡張WakefulIntentServiceを行い、レシーバーコールでWakefulIntentService.doWakefulWork(context, MyDataService.class)

または、サービスと受信者の両方で共有される静的ロックを実装します - これは難しいでしょう。

WifiLockWi - Fi を使用している場合は、Wakeful Intent サービスで a も使用する必要があります。

于 2013-04-28T21:47:46.073 に答える