4

我正在使用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):acquireDVFSLockLocked:类型: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 或更高版本。使用原生 Android API 进行 BLE 扫描


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):WIN DEATH: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 个服务”的应用程序,则该服务处于活动状态并正在运行,如果我看不到它,则该进程没有运行?

4

1 回答 1

0

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

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

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

希望它会有所帮助。

于 2015-09-08T08:15:58.967 回答