Android看门狗

        近期在开发过程中遇到几个问题,应用B在初始化的时候,需要通过Android板子的芯片加密验证,但是现在加密芯片不稳定,有时候能够初始化通过,有时候整个应用会直接崩溃掉,出现“程序已经停止运行“的Dialog,需要人为的点击确定,然后去打开应用。这是问题一问题二:程序在跑的过程中,有时也会遇到因为加密芯片不稳定而造成的程序崩溃。问题三:加密芯片在初始化的过程中,不会崩溃掉,这种情况下应用没办法正常工作;但是现在我们的板子是需要挂在公交车上面,进行视频采集的,因为这种场景下是无屏幕,无声音,人是不可能进行操作。因此,必须要有一种实现方式,务必确保程序能够始终运行在后台。说的更加直白一点就是必须要有一个守护的进程,对其进行守护,那要实现这个功能,最简单的想法就是:做一个守护的APP,开启监听开机广播,然后在广播中启动一个服务,在该服务中将查看当前运行的进程,如果发现B应用还未启动,那么我们通过隐士意图的方式启动应用B。 

       此外,这里还有一个关键性的问题!我们的应用在崩溃的时候,android的系统会提示”运行停止“,这个时候,我们的应用进程还在后台,只有当我们点击确定的时候,这个进程才被回收掉。那么,怎么解决这个问题呢?我们需要自定义一个异常CrashHandler继承自UncaughtExceptionHandler,并Thread.setDefaultUncaughtExceptionHandler()方法将异常处理类设置到线程上。在异常的处理上,我们直接干掉这个进程,这样我们的看门狗就可以发现了。这个可以解决问题一以及问题二。但是问题三没得到解决,本来想着在遇到情况三时,直接自己杀结束自己进程,但是现在由于芯片以及库的原因不允许这么干。所以怎么办?这里我想到了给看门狗发消息的方式。我们在进入程序的时候使用AIDL技术给看门狗发一条消息msg1,在初始化成功以后,会给看门狗再发一条消息msg2。这样,当看门狗收不到消息msg2的时候就该重启这个应用B了(注意使用AIDL文件务必确保他所在的包路径一样!!!)。下面是看门狗的Manifest文件


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.vechicledog"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="19" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        
   		<activity
            android:name="com.reconova.vechicledog.activity.MainActivity"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.NoDisplay">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>  
        
        <!-- 看门狗服务 -->
        <service android:name="com.reconova.vechicledog.service.VechicleDogService" >
            <intent-filter>
                <action android:name="com.reconova.VECHICLE_DOG_SERVICE" />
            </intent-filter>
        </service>

    	<!-- 开机监听 -->
        <receiver android:name="com.reconova.vechic
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值