Android提高第四篇之Service.docx

上传人:b****2 文档编号:24117730 上传时间:2023-05-24 格式:DOCX 页数:11 大小:17.15KB
下载 相关 举报
Android提高第四篇之Service.docx_第1页
第1页 / 共11页
Android提高第四篇之Service.docx_第2页
第2页 / 共11页
Android提高第四篇之Service.docx_第3页
第3页 / 共11页
Android提高第四篇之Service.docx_第4页
第4页 / 共11页
Android提高第四篇之Service.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

Android提高第四篇之Service.docx

《Android提高第四篇之Service.docx》由会员分享,可在线阅读,更多相关《Android提高第四篇之Service.docx(11页珍藏版)》请在冰豆网上搜索。

Android提高第四篇之Service.docx

Android提高第四篇之Service

Android提高第四篇之Service——维信科技

如果把Activity比喻为前台程序,那么Service就是后台程序,Service的整个生命周期都只会在后台执行(维信科技提供)。

Service跟Activity一样也由Intent调用。

在工程里想要添加一个Service,先新建继承Service的类,然后到AndroidManifest.xml->Application->ApplicationNodes中的Service标签中添加。

Service要由Activity通过startService或者bindService来启动,Intent负责传递参数(维信科技提供)。

startService与bindService都可以启动Service,那么它们之间有什么区别呢?

它们两者的区别就是使Service的周期改变。

由startService启动的Service必须要有stopService来结束Service,不调用stopService则会造成Activity结束了而Service还运行着。

bindService启动的Service可以由unbindService来结束,也可以在Activity结束之后(onDestroy)自动结束。

android="

android:

orientation="vertical"android:

layout_width="fill_parent"

android:

layout_height="fill_parent">

layout_width="wrap_content"

android:

layout_height="wrap_content"android:

id="@+id/btnStartMyService"

android:

text="StartMyService">

layout_width="wrap_content"

android:

layout_height="wrap_content"android:

id="@+id/btnStopMyService"

android:

text="StopMyService">

layout_width="wrap_content"

android:

layout_height="wrap_content"android:

id="@+id/btnBindMyService"

android:

text="BindMyService">

layout_width="wrap_content"

android:

layout_height="wrap_content"android:

id="@+id/btnUnbindMyService"

android:

text="UnbindMyService">

layout_width="wrap_content"

android:

layout_height="wrap_content"android:

id="@+id/btnExit"

android:

text="退出程序">

packagecom.testService;

importandroid.app.Activity;

importandroid.app.Service;

importandroid.content.ComponentName;

importandroid.content.Intent;

importandroid.content.ServiceConnection;

importandroid.os.Bundle;

importandroid.os.IBinder;

importandroid.util.Log;

importandroid.view.View;

importandroid.widget.Button;

publicclasstestServiceextendsActivity{

ButtonbtnStartMyService,btnStopMyService,btnBindMyService,btnUnbindMyService,btnExit;

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

btnStartMyService=(Button)this.findViewById(R.id.btnStartMyService);

btnStartMyService.setOnClickListener(newClickEvent());

btnStopMyService=(Button)this.findViewById(R.id.btnStopMyService);

btnStopMyService.setOnClickListener(newClickEvent());

btnBindMyService=(Button)this.findViewById(R.id.btnBindMyService);

btnBindMyService.setOnClickListener(newClickEvent());

btnUnbindMyService=(Button)this.findViewById(R.id.btnUnbindMyService);

btnUnbindMyService.setOnClickListener(newClickEvent());

btnExit=(Button)this.findViewById(R.id.btnExit);

btnExit.setOnClickListener(newClickEvent());

}

@Override

publicvoidonDestroy()

{

super.onDestroy();

Log.e("Activity","onDestroy");

}

privateServiceConnection_connection=newServiceConnection(){

@Override

publicvoidonServiceConnected(ComponentNamearg0,IBinderarg1){

//TODOAuto-generatedmethodstub

}

@Override

publicvoidonServiceDisconnected(ComponentNamename){

//TODOAuto-generatedmethodstub

}

};

classClickEventimplementsView.OnClickListener{

@Override

publicvoidonClick(Viewv){

Intentintent=newIntent(testService.this,MyService.class);

if(v==btnStartMyService){

testService.this.startService(intent);

}

elseif(v==btnStopMyService){

testService.this.stopService(intent);

}

elseif(v==btnBindMyService){

testService.this.bindService(intent,_connection,Service.BIND_AUTO_CREATE);

}

elseif(v==btnUnbindMyService){

if(MyService.ServiceState=="onBind")//Service绑定了之后才能解绑

testService.this.unbindService(_connection);

}

elseif(v==btnExit)

{

testService.this.finish();

}

}

}

}

packagecom.testService;

importandroid.app.Service;

importandroid.content.Intent;

importandroid.os.IBinder;

importandroid.util.Log;

publicclassMyServiceextendsService{

staticpublicStringServiceState="";

@Override

publicIBinderonBind(Intentarg0){

Log.e("Service","onBind");

ServiceState="onBind";

returnnull;

}

@Override

publicbooleanonUnbind(Intentintent){

super.onUnbind(intent);

Log.e("Service","onUnbind");

ServiceState="onUnbind";

returnfalse;

}

@Override

publicvoidonCreate(){

super.onCreate();

Log.e("Service","onCreate");

ServiceState="onCreate";

}

@Override

publicvoidonDestroy(){

super.onDestroy();

Log.e("Service","onDestroy");

ServiceState="onDestroy";

}

@Override

publicvoidonStart(Intentintent,intstartid){

super.onStart(intent,startid);

Log.e("Service","onStart");

ServiceState="onStart";

}

}

在Android里面可以使用SAX和DOM,DOM需要把整个XML文件读入内存再解析,比较消耗内存,而SAX基于事件驱动的处理方式,可以在各节点触发回调函数,不过SAX适合节点结构简单的XML文档,复杂的XML文档在后期的节点深度处理会有点麻烦(维信科技提供)。

xmlversion="1.0"encoding="utf-8"?

>

testSAX

hellogv

使用SAX解析,需要定义SAXParserFactory(使应用程序能够配置和获取基于SAX的解析器以解析XML文档),SAXParser(从各种输入源解析XML),XMLReader(使用回调函数读取XML文档),其中XMLReader是个关键(维信科技提供)。

XMLReader可以为解析XML定义各种回调函数,“条件符合”的时候触发这些回调函数。

SAXParserFactoryfactory=SAXParserFactory.newInstance();

SAXParserparser=factory.newSAXParser();

XMLReaderreader=parser.getXMLReader();

reader.setContentHandler(handler);

reader.parse(newInputSource(testSAX.this.getResources()

.openRawResource(R.raw.test)));

在这段代码里,XMLReader就调用继承DefaultHandler的SAXHandler。

DefaultHandler已实现ContentHandler,DTDHandler,EntityResolver,ErrorHandler等接口,包含常见读取XML的操作,具体请看下面的SAXHandler.java源码(维信科技提供)。

生成XML的结果如下

android="

android:

orientation="vertical"android:

layout_width="fill_parent"

android:

layout_height="fill_parent">

layout_height="wrap_content"

android:

layout_width="fill_parent"android:

id="@+id/btnSAX"

android:

text="使用SAX解析XML">

layout_height="wrap_content"

android:

layout_width="fill_parent"android:

text="生成XML"android:

id="@+id/btnOutput">

text="@+id/EditText01"android:

id="@+id/EditText01"

android:

layout_width="fill_parent"android:

layout_height="fill_parent">

packagecom.testSAX;

importjava.io.StringWriter;

importjavax.xml.parsers.SAXParser;

importjavax.xml.parsers.SAXParserFactory;

importorg.xml.sax.InputSource;

importorg.xml.sax.XMLReader;

importorg.xmlpull.v1.XmlSerializer;

importandroid.app.Activity;

importandroid.os.Bundle;

importandroid.util.Xml;

importandroid.view.View;

importandroid.widget.Button;

importandroid.widget.EditText;

publicclasstestSAXextendsActivity{

/**Calledwhentheactivityisfirstcreated.*/

ButtonbtnSAX,btnOutput;

EditTextmemo;

SAXHandlerhandler=newSAXHandler();

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

btnSAX=(Button)this.findViewById(R.id.btnSAX);

btnSAX.setOnClickListener(newClickEvent());

btnOutput=(Button)this.findViewById(R.id.btnOutput);

btnOutput.setOnClickListener(newClickEvent());

memo=(EditText)this.findViewById(R.id.EditText01);

}

classClickEventimplementsView.OnClickListener{

@Override

publicvoidonClick(Viewv){

if(v==btnSAX){//解析XML,并保存标记,属性等值

try{

SAXParserFactoryfactory=SAXParserFactory.newInstance();

SAXParserparser=factory.newSAXParser();

XMLReaderreader=parser.getXMLReader();

reader.setContentHandler(handler);

reader.parse(newInputSource(testSAX.this.getResources()

.openRawResource(R.raw.test)));

}catch(Exceptionee){}

}

elseif(v==btnOutput){//生成XML

try{

XmlSerializerserializer=Xml.newSerializer();

StringWriterwriter=newStringWriter();

try{

serializer.setOutput(writer);

serializer.startDocument("UTF-8",true);

for(inti=0;i

{

if(handler.GetKeys().get(i).equals("startTag"))

{

serializer.startTag("",(String)handler.GetValues().get(i));

}

elseif(handler.GetKeys().get(i).equals("Attr")){

String[]str=(String[])handler.GetValues().get(i);

serializer.attribute("",str[0],str[1]);

}

elseif(handler.GetKeys().get(i).equals("text"))

serializer.text((String)handler.GetValues().get(i));

elseif(handler.GetKeys().get(i).equals("endTag"))

{

serializer.endTag("",(String)handler.GetValues().get(i));

}

}

serializer.endDocument();

Stringtext=writer.toString();

text=text.replace("><",">/r/n<");

memo.setText(text);//输出到文本框

}catch(Exceptione){

thrownewRuntimeException(e);

}

}catch(Exceptione){}

}

}

}

}

(维信科技提供)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 营销活动策划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1