Android:检测蓝牙cancelDiscovery()后我的应用程序重新启动的原因

时间:2012-02-10 21:56:48

标签: android debugging bluetooth

我致电BluetoothAdapter#cancelDiscovery()后不久,我的应用程序重新启动。换句话说,我的Application子类的onCreate方法被调用。设备使用的是Android 2.1版。

我很难确定导致此应用程序重启的具体原因。

是否有任何技巧可以帮助找出导致此类问题的原因?

非常感谢你的时间。

更新

当我中断BluetoothSocket#connect()尝试先前存储但当前不可用的设备地址时,重启正在进行;当我按Activity物理按钮转换到自定义菜单时,父版Menu被销毁会导致此中断。

Logcat显示我正在运行的线程在我设置的通信周期中结束。此时会向Handler发送一条消息;它将即将收到消息,但应用程序然后重新启动,handleMessage(msg)不会被调用。

Handler在此事件发生之前已收到消息,我知道该引用仍然存在非null。我不认为这是问题的根源。

这是我的清单:

的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.ndb.mindpad" android:versionCode="1" android:versionName="8.4">
    <application android:name=".MindPad" android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".Main"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
            android:configChanges="orientation">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".Preferences"
        android:label="@string/preferences_label"
        android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
        android:configChanges="orientation">
        </activity>
        <activity android:name="DeviceList"
            android:label="@string/communicator_label"
            android:configChanges="orientation">
        </activity>
        <service android:name="BluetoothService" />
        <service android:name="RecognizerService" />
    </application>
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.GET_TASKS"/>
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <!-- Min Android SDK 2.1 -->
    <uses-sdk android:minSdkVersion="7" /> 
</manifest>

更新2

我按照here找到的前两个答案的建议完成了,并且没有在本地打印异常数据(CustomExceptionHandler答案,使用Log.d修改)或报告给Google表格(ACRA回答)。所以这表明没有未捕获的异常,因为我已经将输出机制添加到我的每个线程构造函数中。

那么,如果没有未捕获的异常,为什么我的应用程序会重新创建呢?

0 个答案:

没有答案