Фоновая служба Beacon иногда отключается на Android

Я использую Android Beacon Library 2.0, и у меня возникла странная проблема. с фоновой службой маяка. Я запускаю свое приложение вручную хотя бы один раз, выключаю свое устройство и перезапускаю его. Если я захожу в список запущенных приложений/сервисов, я вижу название своего приложения (1 процесс, 1 сервис), но через несколько секунд оно исчезает из списка как убитое из Android. Иногда через 2-3 минуты появляется снова, но через несколько секунд исчезает. Такое поведение не является «правилом», иногда служба работает без проблем и остается активной.

Это мой манифест:

<uses-sdk
    android:minSdkVersion="17"
    android:targetSdkVersion="19" />

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<application
    android:allowBackup="true"
    android:icon="@drawable/my_drawable"
    android:label="MyApp"
    android:theme="@android:style/Theme.Holo" 
    android:name="BeaconReferenceApplication">
    <activity
        android:name="org.altbeacon.beaconreference.MonitoringActivity"
        android:theme="@android:style/Theme.Holo"
        android:label="MyApp" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name="org.altbeacon.beaconreference.RangingActivity"
        android:theme="@android:style/Theme.Holo"
        android:label="MyApp" >
        <intent-filter>
        </intent-filter>
    </activity>

Для тестов я использую Samsung Galaxy tab3 (Android 4.4.2) и Samsung Galaxy tab4 (Android 4.4.2).

Я попытался проверить сообщение logcat, и эти строки, возможно, могли бы что-то объяснить.

E/BeaconManager (4802): не удается связаться со службой для установки периодов сканирования

D/BeaconManager(4802): этот потребитель не привязан. привязка: org.altbeacon.beaconreference.BeaconReferenceApplication@42320918

D/BeaconManager(4802): количество потребителей теперь: 1

V/ApplicationPolicy (2365): isApplicationStateBlocked userId 0 pkgname org.altbeacon.beaconreference

D/CustomFrequencyManagerService(2365)

W/ActivityManager(2365): mDVFSHelper.acquire()

D/PhoneStatusBar(2551): setTransGradiationMode=false, mTransparentMode=false, mSemiTransparentMode=false, mMultiWindowMode=false

W/ResourceType(2365): неизвестный пакет при получении значения для номера ресурса 0x7f020000

D/StatusBarManagerService(2365): tr p:2365,o:f

W/WindowManager (2365): Token{432ad010 ActivityRecord{432ace98 u0 org.altbeacon.beaconreference/.MonitoringActivity t3}} не удалось создать начальное окно

W/WindowManager (2365): android.content.res.Resources$NotFoundException: идентификатор ресурса #0x7f020000

W/WindowManager(2365): в android.content.res.Resources.getValue(Resources.java:2354)

W/WindowManager(2365): в android.content.res.Resources.getDrawable(Resources.java:1919)

W/WindowManager (2365): в com.android.internal.widget.ActionBarView.setIcon(ActionBarView.java:1037)

W/WindowManager (2365): в com.android.internal.policy.impl.PhoneWindow.installDecor(PhoneWindow.java:3478)

W/WindowManager (2365): в com.android.internal.policy.impl.PhoneWindow.getDecorView(PhoneWindow.java:1886)

W/WindowManager (2365): в com.android.internal.policy.impl.PhoneWindowManager.addStartingWindow(PhoneWindowManager.java:2639)

W/WindowManager (2365): в com.android.server.wm.WindowManagerService$H.handleMessage(WindowManagerService.java:9140)

W/WindowManager(2365): в android.os.Handler.dispatchMessage(Handler.java:102)

W/WindowManager(2365): в android.os.Looper.loop(Looper.java:146)

W/WindowManager(2365): на android.os.HandlerThread.run(HandlerThread.java:61)

D/PointerIcon (2365): setMouseIconStyle1 pointerType: 1001iconType: 101 флаг: 0

D/PointerIcon(2365): setMouseCustomIcon IconType такой же.101

I/BeaconService(4802): beaconService версии 2.0-samsung1 запускается

I/BeaconService(4802): SDK 18 или выше. Использование собственных API-интерфейсов Android для сканирования BLE


D/PhoneStatusBar(2551): setTransGradiationMode=false, mTransparentMode=false, mSemiTransparentMode=false, mMultiWindowMode=false

W/ResourceType(2365): неизвестный пакет при получении значения для номера ресурса 0x7f020000

W/WindowManager (2365): Token{4335a9f8 ActivityRecord{4335a880 u0 org.altbeacon.beaconreference/.RangingActivity t3}} не удалось создать начальное окно

W/WindowManager (2365): android.content.res.Resources$NotFoundException: идентификатор ресурса #0x7f020000

W/WindowManager(2365): в android.content.res.Resources.getValue(Resources.java:2354)

W/WindowManager(2365): в android.content.res.Resources.getDrawable(Resources.java:1919)

W/WindowManager (2365): в com.android.internal.widget.ActionBarView.setIcon(ActionBarView.java:1037)

W/WindowManager (2365): в com.android.internal.policy.impl.PhoneWindow.installDecor(PhoneWindow.java:3478)

W/WindowManager (2365): в com.android.internal.policy.impl.PhoneWindow.getDecorView(PhoneWindow.java:1886)

W/WindowManager (2365): в com.android.internal.policy.impl.PhoneWindowManager.addStartingWindow(PhoneWindowManager.java:2639)

W/WindowManager (2365): в com.android.server.wm.WindowManagerService$H.handleMessage(WindowManagerService.java:9140)

W/WindowManager(2365): в android.os.Handler.dispatchMessage(Handler.java:102)

W/WindowManager(2365): в android.os.Looper.loop(Looper.java:146)

W/WindowManager(2365): в android.os.HandlerThread.run(HandlerThread.java:61)

D/BtGatt.GattService(3581): onScanResult() - адрес=F4:B8:5E:E4:BA:4A, rssi=-53

D/BtGatt.GattService(3581): Binder не работает - отмена регистрации клиента (5)!

E/BtGatt.GattService(3581): Исключение: android.os.DeadObjectException

W/InputDispatcher(2365): канал ~ Потребитель закрыл входной канал или произошла ошибка. события = 0x9

I/WindowState(2365): ВЫИГРАТЬ СМЕРТЬ: Window{43379c08 u0 org.altbeacon.beaconreference/org.altbeacon.beaconreference.RangingActivity}

E/InputDispatcher(2365): канал ~ Канал безвозвратно поврежден и будет удален!

W/InputDispatcher (2365): попытка отменить регистрацию уже незарегистрированного входного канала.

I/WindowState ( 2365 ): WIN DEATH: Window {43366f58 u0 org.altbeacon.beaconreference/org.altbeacon.beaconreference.MonitoringActivity}

Мое приложение правильно определяет все маяки в радиусе действия, но мне нужна работающая фоновая служба, чтобы работать в течение длительного времени. Не могли бы вы предложить мне, что я делаю неправильно?

EDIT
Я могу предположить, что если я вижу приложение с "1 процессом и 1 службой" в списке запущенных программ, служба активна и работает, и если я не вижу ее процесс не запущен?


person Ant4res    schedule 08.09.2015    source источник


Ответы (1)


Насколько я понимаю, я думаю, что какое бы приложение я ни разрабатывал, используя концепцию маяков.

Я буду запускать свою службу, пока моя деятельность не будет работать в фоновом режиме. Когда мое приложение будет очищено пользователем, я перестану сканировать все маяки. Мое мнение - запускать службу только тогда, когда активность, связанная с ней, запущена, или просто остановить службу. Это также повлияет на батарею устройства.

Для привязки службы к активности вы можете посмотреть здесь.

Надеюсь, это поможет.

person AndiGeeky    schedule 08.09.2015
comment
Спасибо за ваш ответ, но, к сожалению, ваш ответ мне не очень помогает... однако я прочитаю информацию о привязке в руководстве разработчика. - person Ant4res; 08.09.2015
comment
Я могу предположить, что если я вижу приложение с 1 процессом и 1 службой в списке запущенных программ, то служба активна и работает, а если я ее не вижу, значит, процесс не запущен? - person Ant4res; 09.09.2015
comment
@ Ant4res: вы проверили это в разделе «Запущенное приложение», верно? Если да, то это правда, что если вы этого не видите, значит процесс не запущен..!! - person AndiGeeky; 09.09.2015