Android开发入门之Service用法分析
本文实例讲述了android中service用法。分享给大家供大家参考,具体如下:
关于service的讲解网上已经很多了,这里是关于自己通过写代码service的一点体会 还有结合其他人对service的一点总结
service可以理解为一个隐形的activity 但它又与activity有些不同,首先service是没界面,用户看不到 可交互的组件 级别是与activity是差不多的
service中定义了一系列和自身声明周期相关的方法:
onbind(...)是必须实现的方法,返回一个绑定接口给service
oncreate(); 当service第一次被创建时 由系统调用
onstart(...)当通过startservice()方法调用启动service时被调用
ondestroy();当service不再使用,系统调用该方法....
本次代码分别有mainactivity,java,myservice.java main.xml这几个重要文件 下面通过这几个文件对service进行理解 见注释
老规矩 先开始布局 挺简单的 就是几个button
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <textview android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="service测试" android:gravity="center_horizontal" /> <button android:id="@+id/startbutton" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="start service" /> <button android:id="@+id/stopbutton" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="stop service" /> <button android:id="@+id/bindbutton" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="bind service" /> <button android:id="@+id/unbindbutton" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="unbind service" /> </linearlayout>
布局效果图:
开始服务文件, myservice继承service
public class myservice extends service { final static string tag = "myservice"; @override public ibinder onbind(intent intent) { log.i(tag,"onbind()......"); showinfo("onbind()......"); return null; } // setvice创建时被调用 @override public void oncreate() { log.i(tag,"oncreate()......"); showinfo("oncreate()......"); super.oncreate(); } //当客户调用startservice()启动service时被调用 @override public void onstart(intent intent, int startid) { log.i(tag,"onstart()........"); showinfo("onstart()........"); super.onstart(intent, startid); } @override public void ondestroy() { log.i(tag,"ondestroy()........"); showinfo("ondestroy()........"); super.ondestroy(); } @override public boolean onunbind(intent intent) { log.i(tag,"onunbind()........"); showinfo("onunbind()........"); return super.onunbind(intent); } public void showinfo(string str) { toast.maketext(this, str, toast.length_short).show(); } }
上面主要是service中几个周期函数 这个myservice代表一个服务,当然在这里面我们在里面加什么实质性的东西,例如可以在
onstart(...)函数里创建一个音乐播放器mediaplayer 当服务被启动时播放音乐.....
你创建了service 就跟你创建activity一样 必须在manifest里注册 下面开始注册
<!-- 增加的service --> <service android:name=".myservice"> <intent-filter > <action android:name="com.study.android.action.my_service"/> </intent-filter> </service>
服务就这样 注册成功。光注册成功还没有完成任务哦...... 还有启动服务,停止服务,绑定服务,解除绑定的服务
package com.study.android; import android.app.activity; import android.app.service; import android.content.componentname; import android.content.intent; import android.content.serviceconnection; import android.os.bundle; import android.os.ibinder; import android.util.log; import android.view.view; import android.view.view.onclicklistener; import android.widget.button; import android.widget.toast; public class mainactivity extends activity { final static string action = "com.study.android.action.my_service"; private button startbutton,stopbutton; private button bindbutton,unbindbutton; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); startbutton = (button)findviewbyid(r.id.startbutton); stopbutton = (button)findviewbyid(r.id.stopbutton); bindbutton = (button)findviewbyid(r.id.bindbutton); unbindbutton = (button)findviewbyid(r.id.unbindbutton); // 开启服务 startbutton.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { // 启动服务 startservice(buildintent()); } }); //startbutton按下后 周期函数执行顺序 oncreate()----->onstart() /******************************************/ // 停止服务 stopbutton.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { stopservice(buildintent()); } }); //stopbutton按下后 周期函数执行顺序 ondestroy() /******************************************/ // 绑定服务 bindbutton.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { bindservice(buildintent(),conn,service.bind_auto_create); /*第三个参数:如何创建service 一般是制定绑定时自动创建*/ } }); // bindbutton 被按下后(当前服务已经stop掉)周期函数执行顺序 oncreate()------->onbind() /******************************************/ // 接触绑定service unbindbutton.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { unbindservice(conn); } }); //unbindbutton按下后 周期函数执行顺序onunbind()------->ondestroy() } // 连接对象 private serviceconnection conn = new serviceconnection() { @override public void onserviceconnected(componentname name, ibinder service) { log.i("service","连接服务成功!"); showinfo("连接服务成功!"); } @override public void onservicedisconnected(componentname name) { log.i("service","服务连接断开!"); showinfo("服务连接断开!"); } }; public intent buildintent() { intent intent = new intent(); // 设置intent属性 注意:这里action属性要与manifest里服务对应 intent.setaction(action); return intent; } public void showinfo(string str) { toast.maketext(this, str, toast.length_short).show(); } }
更多关于android相关内容感兴趣的读者可查看本站专题:《android service组件使用技巧总结》、《android编程之activity操作技巧总结》、《android资源操作技巧汇总》、《android文件操作技巧汇总》、《android操作sqlite数据库技巧总结》、《android操作json格式数据技巧总结》、《android数据库操作技巧总结》、《android开发入门与进阶教程》、《android视图view技巧总结》及《android控件用法总结》
希望本文所述对大家android程序设计有所帮助。