什么是Qqt webkit组件件?

Service Unavailable
Service Unavailable
HTTP Error 503. The service is unavailable.您所在的位置: &
聊聊Android四大组件之一的Service
聊聊Android四大组件之一的Service
Service作为Android中四大组件之一,拥有重要的地位。Service具有和Activity一样的级别,只是没有界面,是运行于后台的服务。这个运行“后台”是指不可见,不是指在后台线程中,事实上四大组件都是运行在UI线程中,都不能在各自的生命周期方法中执行耗时操作或者网络请求。 Service的应用场景还是比较多的,比如说在后台播放音乐、实时去更新当前地理位置的变化、新闻APP后台去离线缓存内容、进程间通信等。
Service作为Android中四大组件之一,拥有重要的地位。Service具有和Activity一样的级别,只是没有界面,是运行于后台的服务。这个运行&后台&是指不可见,不是指在后台线程中,事实上四大组件都是运行在UI线程中,都不能在各自的生命周期方法中执行耗时操作或者网络请求。 Service的应用场景还是比较多的,比如说在后台播放音乐、实时去更新当前地理位置的变化、新闻APP后台去离线缓存内容、进程间通信等。
Service主要可以分为两类:Local
Service、Remote
Service。比较常用的还是本地服务,应用于程序内部。可以通过Context.startService()启动Service,通过 Context.stopService()结束服务。同时也可以Context.bindService()来绑定一个service服务自己,也可以 通过Context.unbindService()解绑。无论调用多少次startService,只需一句stopService就终结服务了。
Remote Service
用于android系统内部的应用程序之间。可以定义接口并把接口暴露出来,以便其他应用进行操作。客户端建立到服务对象的连接,并通过那个连接来调用服 务。调用Context.bindService()方法建立连接,并启动,以调用
Context.unbindService()关闭连接。多个客户端可以绑定至同一个服务。如果服务此时还没有加载,bindService()会先加 载它。
启动Service的方式有两种,那对应着的是Service的两种生命周期。看下Google官方的配图,简单直白明了,我就不再赘述了。
由于start和stop的方式来控制服务的方式比较简单,在此也就不多赘述了。只是还需提醒在这种方式下,Activity与Service的通信就显 得不那么直白简单了,因为我们拿不到Service的引用。如果你通过单例的形式去拿到Service的引用,进而获取其中的方法和属性也未尝不可,但是 入侵性比较严重,在此不推荐大家使用这种办法。比较好的实现Activity和Service之间通信的是另一个重要的组件 BroadCastReceiver,下面的实例中会用到。
实战使用的是一个简单的音乐播放器。当然了,使用的是bind和unbind的方式。bind即绑定服务,unbind即解绑服务,也进而调用了 Service的onDestroy方法销毁。bind可以直接拿到Service的引用,能直接操控service。bind可以用在当前应用中的业务 处理,也可以通过AIDL实现进程间通信。本文先介绍第一种。简单介绍下这个Demo实现的功能,它会播放手机SD卡上的一首歌曲,你可以对其开始和暂停 操作,界面会展示歌曲的时长以及歌曲播放的实时位置。两者的交互的实现方式:1、类引用的直接调用 &
2、广播机制,Service发,Activity接收。
一、在MusicService中新建内部类MyBinder,其中有个公有方法返回Service的实例
二、通过MusicService中的onBind方法返回MyBinder的实例,供Activity绑定成功后的回调
三、和Activity一样,需要在manifest中注册
四、Activity中绑定,获得回调的Binder,进而得到MusicService实例
五、拿到了MusicService的引用了,终于可以操作service去播放暂停音乐了
六、在Activity的onDestroy方法中,记得对Service进行解绑。不然会和注册的BroadCastReceiver一样,会造成内存泄漏
好了,今天的干货分享就到这里了,明天为大家献上基于AIDL和Service的进程间通信的实现。
代码地址:【编辑推荐】【责任编辑: TEL:(010)】
关于&&&&的更多文章
本书以谷歌的音乐播放器为例,深入剖析了Android 的重要组件和核
讲师: 24人学习过讲师: 68人学习过讲师: 133人学习过
日-6日,GMIC 北京 2014全球移动互联网大会
日-6日,GMIC 北京 2014全球移动互联网大会
日-6日,GMIC 北京 2014全球移动互联网大会
本书以BI解决方案的体系结构为中心,以SQL Server 2005为载体,将着眼点放在数据挖掘和商业智能上,详细讲解了数据报表、数据分
Windows Phone专家
Android开发专家
51CTO旗下网站8566人阅读
&&&& Qt下的COM组件开发着实让人害怕,因为不是简单的调用,而是需要人为的去包装一下COM,然后在包装的基础上去使用COM中的方法和类。我们习惯了VC编译器带来的便利,通过VC编译器,只需直接import一下组件编译器就能自动帮我们导出COM的tlh描述文件,接下来用户就能很方便的去调用接口,使用方法。
&&&&&& 最新的Qt直接可以下载SDK,这些SDK直接基于MinGW编译器,所以如果想按照VC的那套方式来使用COM组件,那行不通(会报编译器不支持的错误),必须让Qt的源码在VC下编译才能使用。如果用户需要在MinGW编译器下使用COM组件,需要了解一下Qt对COM组件的包装类。我用的Qt版本是4.7,里面会用到QAxObject和QAxWidget类。QAxObject是对COM组件的包装,QAxWidget是对ActiveX控件的包装,简单理解功能性的封装我们一般就是普通的COM组件,如果涉及UI一般会用ActiveX控件。有了这两个类几乎就可以开始简单调用组件了。
&&&& QAxObject和QAxWidget可以通过默认的构造函数建立一个空的COM组件对象(可以理解为COM容器),然后再把需要封装的组件放到空对象中,代码如下
&&& QAxObject&& object((QObject)0);&&&& //建立封装容器
&&& object.setControl(QString::fromUtf8(&{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}&));
//填充需要封装的COM组件到容器中
&&& 或者我们把上面的两步合并成一步,如下代码
&& QAxObjectobject(&{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}&);
&& 当然QAxWidget的代码和上面类似。
&&&&&& 解决了导入COM组件和封装的问题,接下来最重要的就是如何使用接口和方法的问题。如果上面导入过程涉及的CLSID(XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)对应就是一个CoClass问题就好办很多,直接可以调用这个CoClass的方法。当然如果你手中没有COM组件的Qt方法说明,这件事依然很难入手。其实COM是个自描述的结构,任何第三方软件是可以把这种描述化信息自动导出来的。Qt有方法可以自动导出来的,参考如下代码
&&&&&&&& QStringdoc=
object.generateDocumentation();&&
QFile outFile(&c:/debuglog.html&);
&&&&&& &outFile.open(QIODevice::WriteOnly|QIODevice::Append);QTextStreamts(&outFile);
&&& &&& ts&&doc&&
&&&&&&&导出后你会发现是一个非常好的HTML格式的帮助问题,里面对每一个方法都有调用的详细描述。参考帮助后就能开始自己调用了,
&&&&&& QVariantListparams0;
& &&& ¶ms0&&QVariant((int)(w.winId()));
&& &&& params0&&QVariant(

参考资料

 

随机推荐