欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android开发入门之Service用法分析

程序员文章站 2024-03-05 12:16:24
本文实例讲述了android中service用法。分享给大家供大家参考,具体如下: 关于service的讲解网上已经很多了,这里是关于自己通过写代码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>

布局效果图:

Android开发入门之Service用法分析

开始服务文件, 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程序设计有所帮助。