android - Beacon 后台服务有时会被 Android 杀死

标签 android service beacon

我正在使用Android Beacon Library 2.0,我的信标后台服务有一个奇怪的问题。我至少手动启动我的应用程序一次,关闭设备并重新启动。如果我转到正在运行的应用程序/服务列表,我会看到我的应用程序的名称(1 个进程,1 个服务),但几秒钟后它就会从列表中消失,因为已被 Android 杀死。有时2或3分钟后它会再次出现,但几秒钟后它就会消失。 这种行为不是“规则”,有时服务运行没有问题并保持 Activity 状态。

这是我的 list :

<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): Cannot contact service to set scan periods

D/BeaconManager( 4802): This consumer is not bound. binding: org.altbeacon.beaconreference.BeaconReferenceApplication@42320918

D/BeaconManager( 4802): consumer count is now:1

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

D/CustomFrequencyManagerService( 2365): acquireDVFSLockLocked : type : DVFS_MIN_LIMIT frequency : 1400000 uid : 1000 pid : 2365 pkgName : ACTIVITY_RESUME_BOOSTER@5

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

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

W/ResourceType( 2365): No known package when getting value for resource number 0x7f020000

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

W/WindowManager( 2365): Token{432ad010 ActivityRecord{432ace98 u0 org.altbeacon.beaconreference/.MonitoringActivity t3}} failed creating starting window

W/WindowManager( 2365): android.content.res.Resources$NotFoundException: Resource ID #0x7f020000

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

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

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

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

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

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

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

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

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

W/WindowManager( 2365): at adroid.os.HandlerThread.run(HandlerThread.java:61)

D/PointerIcon( 2365): setMouseIconStyle1 pointerType: 1001iconType:101 flag:0

D/PointerIcon( 2365): setMouseCustomIcon IconType is same.101

I/BeaconService( 4802): beaconService version 2.0-samsung1 is starting up

I/BeaconService( 4802): SDK is 18 or higher. Using native Android APIs for BLE scanning


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

W/ResourceType( 2365): No known package when getting value for resource number 0x7f020000

W/WindowManager( 2365): Token{4335a9f8 ActivityRecord{4335a880 u0 org.altbeacon.beaconreference/.RangingActivity t3}} failed creating starting window

W/WindowManager( 2365): android.content.res.Resources$NotFoundException: Resource ID #0x7f020000

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

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

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

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

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

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

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

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

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

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

D/BtGatt.GattService( 3581): onScanResult() - address=F4:B8:5E:E4:BA:4A, rssi=-53

D/BtGatt.GattService( 3581): Binder is dead - unregistering client (5)!

E/BtGatt.GattService( 3581): Exception: android.os.DeadObjectException

W/InputDispatcher( 2365): channel ~ Consumer closed input channel or an error occurred. events=0x9

I/WindowState( 2365): WIN DEATH: Window{43379c08 u0 org.altbeacon.beaconreference/org.altbeacon.beaconreference.RangingActivity}

E/InputDispatcher( 2365): channel ~ Channel is unrecoverably broken and will be disposed!

W/InputDispatcher( 2365): Attempted to unregister already unregistered input channel

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

我的应用程序可以正确检测范围内的所有信标,但我需要一个工作后台服务才能长时间工作。 你能告诉我我做错了什么吗?

编辑
我可以假设,如果我在正在运行的程序列表中看到具有“1 个进程和 1 个服务”的应用程序,则该服务处于 Activity 状态并正在运行,如果我看不到它,则该进程未运行?

最佳答案

根据我的理解,我认为无论我使用信标的概念开发哪个应用程序。

我将运行我的服务,直到我的 Activity 在后台运行。当我的应用程序被用户清除时,我将停止扫描所有信标。 我的观点是仅当与其绑定(bind)的 Activity 正在运行时才运行服务,否则就停止服务。这也会影响设备电池。

要将服务绑定(bind)到 Activity ,您可以查看 here .

希望能有所帮助。

关于android - Beacon 后台服务有时会被 Android 杀死,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32452271/

相关文章:

android - 如何在 Android 应用程序级别检查 SIM 锁

java - 使用 Java 将命名空间数据从服务发送到客户端

android - 将 android 应用程序连接到 asp.net mvc 后端

android - AppOpsManager.OPSTR_GET_USAGE_STATS 始终返回值零 (AppOpsManager.MODE_ALLOWED)

安卓 : RecyclerView row Visibility not working properly

android - ANDROID:Gradle传入参数,例如serverURL

android - 我应该在哪里使用 Service 、 AsyncTask 和 Broadcast Receiver ?

Android Beacon 库测距

android - Android 手机 BLE 设备广告与 startScan 回调之间的间隔时间不同

android - android 6.0 中无需位置权限的信标扫描