当前位置: 移动技术网 > 移动技术>移动开发>Android > Android开发入门之Service用法分析

Android开发入门之Service用法分析

2019年07月24日  | 移动技术网移动技术  | 我要评论

本文实例讲述了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程序设计有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网