自定义3G开关耗时问题

     工作需要,移植过好几款3G,其实就3G本身而言;移植的难度不大,底层无非是虚拟USB串口(2.6以后一般都是用高速或全速)。

上层作为我们硬件厂商来讲,要实现的,主要是根据不同的3G模块,重新整理生成自己的libreference-ril.so动态库了(一般的电话或短信基本功能这里就够了),有机会我也具体总结下,3G的移植,以及网络更新时间和基站定位等功能的实现。

     今天遇到个问题,就是产品中“自定义3G开关”耗时问题,.这是以前“领导”留下的;自定义3G开关,只系统起来后,给用户一个开光,让其去打开3G和关闭3G。而这个开关的功能是:通过“插桩”的方式控制LINUX内核中3G的打开和关闭,以及扩展一个OnPreferenceChangeListener,显示3G的运行状态。主要的考虑是功耗问题。

     但是原来一直好用的这个APP,再新的产品中确出现两个问题!1,打开3G开关的时候,手去碰下屏幕,就会弹出activity崩溃的;2,串口经常会提示找不到libreference-ril.so的DEBUG

现象很恐怖,但是问题还是一下就让我怀疑可能是耗时任务引起的、

查看代码:在点击开关的时候,控制底层打开3G,然后会根据虚拟串口是否打开来开启上层我们的3G daemon(ril-daemon)

if(enable){
	
		Native.3G_on();//打开底层虚拟串口


        while(true){// 等待虚拟串口是否打开

			File desFile = new File ( "/dev/ttyUSB*" ) ; 
			if (desFile.exists())
			{
			    break;
			}
		}

	
		SystemService.start("ril-daemon");//打开了,开启进程

很明显,这个会有个耗时任务,刚好这个模块的虚拟串口打开并不是非常快速。而居然用while所以这个线程就一直阻塞在这里了。

解决的方式很多人也都知道,

    	Thread background = new Thread(new Runnable() {  //建一个后台运行的线程,没S钟发消息给Handler,让其去处理这种耗时的事情
    	
    		public void run() {  
                                      
    		for (int i = 0; i < 100 && flag; i++) { 
    		try{
    			Thread.sleep(1000);
    		}catch(InterruptedException e){
    		}
    		
                  Message message = new Message();
                  message.what = 1;
                  handler.sendMessage(message);	
    				
    			}
    		}
    	
    });
                      if(flag){

                             background.start();
                      }
   }


 

Handler handler = new Handler() { 
		public void handleMessage(Message msg) { 
	               //auto
                       switch(msg.what){
                        case 1:
			File desFile = new File ( "/dev/ttyUSB*" ) ; 
			if (desFile.exists())
			{
			   SystemService.start("ril-daemon");
	                   
			}else{
                              //............................
                        }



这样上面的问题就解决了。其实这也是偶然碰上这个模块的虚拟串口打开较慢的情况,所以出现开头说的两个问题。这里我记录下

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值