Android学习笔记_03 - Service应用测试(续)

Android学习笔记_03 - Service应用测试(续)

在Service里通过Runnab线程调用Thread线程

 

在上篇实现了Service及在Service里调用Runnable线程,通过试验发现了在Runnable线程里执行长时间延时循环时出现的问题。

由于增加的功能很简单,所以直接上代码。其实在上次工程的基础上做点简单的修改,在Runnable里加了一个Thread线程。

1、 代码实现

1)、增加一个从Thread继承过来的新类,取名为:WorkThread,意思是工作线程。

    publicclass WorkThread extends Thread { 

        publicvoid run() {

            //此段可以写线程里想做的任何工作了

            Log.d(TAG," WorkThread Run!");

            delay(1000);// 我测试了,这个参数相当于30秒的延时,程序也没假死,也没产生异常

        }

       

    }

 

2)、定义WorkThread类的实例变量

WorkThread mWorkThread = null;

 

3)、修改timerThread 里的执行代码,修改后的代码如下:

Runnable timerThread = newRunnable(){

        publicvoid run(){

            Log.v(TAG,"TimerOnTimer");

            if((mWorkThread == null)||(!(mWorkThread.isAlive()))){

                mWorkThread= new WorkThread();

                mWorkThread.start();

            }

            handler.postDelayed(timerThread, 1000);

        } 

};

 

2、 运行测试

运行程序后,可以通过LogCat来查看程序输出:


注意看上图,红色框子里选择的是verbose,字面上是“啰嗦”的意思,就是所有的输出消息都会显示,TimerService的定时消息输出时用的是Log.v(),所以会显示出来,同时Log.d()的输出当然也会显示出来。从上图可以看出,TimerService的定时时间约为1秒,一直以1秒间隔输出LogCat消息,同时每秒检查一次mWorkThread的状态,如果为空或者没有在活动状态,说明线程运行结束,就创建一个新的线程,代码里新建线程的作用就是运行30秒的延时代码而已。请注意:如果在主线程里循环超过5秒以上,就有可能出现“无响应”异常哦。


上图红框里选择的是debug,就是debug级别以上的消息都会输出,由于Verbos级别低于Debug,所以不会输出,从上图可以看到,mWorkThread里面的延时函数循环延时时间30秒左右,但主程序都正常运行呢。


狂点按钮“点我”,计数增加很正常,没有丝毫延迟。从上面的例子可以看到,此法实现的线程应用,可以应对线程里长时间不响应的应用场合。实际项目中,可以针对每个具体应用建立不同的线程类,比如下载、上传、数据查询等,既可以单个执行,也可以同时执行,达到了我的项目应用要求。

 




示例源码:Android学习笔记_03 - Service应用测试(续)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值