【问题标题】:Beacon background service sometimes is killed from AndroidBeacon 后台服务有时会被 Android 杀死
【发布时间】:2015-09-08 07:59:07
【问题描述】:

我正在使用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):获取DVFSLockLocked:类型: DVFS_MIN_LIMIT 频率: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):获取价值时没有已知的包 资源号 0x7f020000

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

W/WindowManager(2365): 令牌{432ad010 ActivityRecord{432ace98 u0 org.altbeacon.beaconreference/.MonitoringActivity t3}} 创建失败 起始窗口

W/WindowManager(2365): android.content.res.Resources$NotFoundException:资源 ID #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): 在 adroid.os.HandlerThread.run(HandlerThread.java:61)

D/PointerIcon(2365):setMouseIconStyle1 指针类型:1001iconType:101 标志:0

D/PointerIcon(2365): setMouseCustomIcon IconType 相同。101

I/BeaconService(4802):beaconService 版本 2.0-samsung1 正在启动 向上

I/BeaconService(4802):SDK 为 18 或更高版本。使用原生安卓 BLE扫描API


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

W/ResourceType(2365):获取价值时没有已知的包 资源号 0x7f020000

W/WindowManager(2365): 令牌{4335a9f8 ActivityRecord{4335a880 u0 org.altbeacon.beaconreference/.RangingActivity t3}} 创建失败 起始窗口

W/WindowManager(2365): android.content.res.Resources$NotFoundException:资源 ID #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}

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

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

【问题讨论】:

    标签: android service beacon


    【解决方案1】:

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

    我将运行我的服务,直到我的活动在后台运行。当我的应用程序将被用户清除时,我将停止扫描所有信标。 我的意见是仅在绑定到它的活动正在运行或停止服务时才运行服务。这也会影响设备电池。

    要将服务绑定到活动,您可以查看here

    希望对您有所帮助。

    【讨论】:

    • 感谢您的回答,但不幸的是,您的回答对我没有多大帮助...不过我会阅读开发手册中有关绑定的信息。
    • 我可以假设,如果我在正在运行的程序列表中看到具有“1 个进程和 1 个服务”的应用程序,则该服务处于活动状态并正在运行,如果我看不到它,则该进程是没有运行?
    • @Ant4res :您在“运行应用程序”部分检查了这个,对吗?如果是,那么确实,如果您看不到它,则该进程没有运行..!!
    猜你喜欢
    • 2012-08-26
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    相关资源
    最近更新 更多