======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
======================================================
关于继承intentservice,构造函数需要注意一个地方,eclipse默认生成的构造函数是
public myintentservice(string name) {
super(name);
}
而官方文档的示例中是没有参数的构造方法,使用eclipse这个默认构造函数的话会报一个运行时错误: java.lang.instantiationexception,在google groups里找到了解决办法,继承intentservice的类必须有一个public的无参的构造函数,将上面eclipse自动生成的构造函数改为下面这样的就可以了:
public myintentservice() {
super("somename");
}
为什么要这样改,看intentservice构造函数的源码:
public intentservice(string name) {
super();
mname = name;
}
sdk文档里说构造函数里面的服务名字只在调试时有用,可以随便写一个名字。
另一个需要特别指出的时,在onhandleintent里不需要自己处理线程,或者新启线程,intentservice默认会为队列中的任务启动后台线程,源码中的实现是这样的:
private final class servicehandler extends handler {
public servicehandler(looper looper) {
super(looper);
}
@override
public void handlemessage(message msg) {
onhandleintent((intent)msg.obj);
stopself(msg.arg1);
}
}
@override
public void oncreate() {
super.oncreate();
handlerthread thread = new handlerthread("intentservice[" + mname + "]");
thread.start();
mservicelooper = thread.getlooper();
mservicehandler = new servicehandler(mservicelooper);
}
看源码可以得知onhanldeintent()是在新的后台线程handlerthread里执行的,所以不需要要我们自己新开线程。
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
本文介绍如何在Eclipse中修改Intentservice构造函数以避免运行时错误,并探讨Intentservice如何自动处理后台线程。同时,推荐一个免费空间资源。
710

被折叠的 条评论
为什么被折叠?



