Androidロック状態でサービスが正常に動作しないという探究

1678 ワード

理想的には、例えば音楽再生などのサービスは、スクリーンロック状態で正常に再生できる.
最近android 5.0で開発され、Bluetooth 4.0のサービスとsocketのネットワークリクエストサービスが書かれており、必要なデータがあればBluetoothスレーブに転送して対応する処理を行う必要があります.スクリーンロック状態で直接無効になり、解決策:
WLANを開き、「詳細」、「WLANスリープポリシー」、「スリープしない」、「閉じる」などのオプションを選択します.
これにより、少なくともスクリーンロック後にネットワーク通信を行うことができる.
参考フォーラム:http://bbs.csdn.net/topics/391877495
スクリーンロック後にサービスがkillされると、多くの資料を調べても解決されず、大きく異なるが、実際の操作は役に立たず、仮想マシンkillに直接接続され、サービスのonDestroy()をスキップした.多くの人がシステム層で分析し、この文章を共有しています.http://www.cnblogs.com/andies/p/5893143.html
上記の場合、最も暴力的な方法はスクリーンロックと休眠を禁止することですが、非常に消費電力がかかります.以下の文章を参考にすると、すごい感じがしますが、5.0以降でいいかどうか分かりません.http://blog.csdn.net/chenyafei617/article/details/6575621
最后に私の方法を分かち合いましょう、まずサービスは需要を満たすためにbindServiceとstartServiceの2つの方式を采用してスタートして、onStartCommandの方法は以下のようにして、return START_を使いましたSTICKYとstartForegroundの2つの方法でサービスがkillされることを防止します.
@Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        NotificationManager nm = (NotificationManager) this.getSystemService(NOTIFICATION_SERVICE);
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
        builder.setContentTitle("     ")
                .setContentText("")
                .setWhen(System.currentTimeMillis())
                .setPriority(Notification.PRIORITY_MIN)
                .setSmallIcon(R.mipmap.ble_icon)
                .setAutoCancel(true);
        Notification notification = builder.build();
        startForeground(1, notification);
        return START_STICKY;
    }

この方式を採用しなければ、bindServiceの再ロック状況は約4分後に殺される.この方式はスクリーンをロックした場合、約11分で殺された.しかし、自動的に画面をロックしないか、10分以内に画面を点灯すれば問題ありません.