xml文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.service.MainActivity" >
<Button
android:id="@+id/service_start"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="start service"
android:onClick="doClick"/>
<Button
android:id="@+id/service_stop"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="stop service"
android:onClick="doClick"/>
<Button
android:id="@+id/service_bind"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="bind serrvice"
android:onClick="doClick"/>
<Button
android:id="@+id/music_start"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="start the music"
android:onClick="doClick"/>
<Button
android:id="@+id/music_pause"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="pause the music"
android:onClick="doClick"/>
<Button
android:id="@+id/service_unbind"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="unbind service"
android:onClick="doClick"/> </LinearLayout>

源代码:

Myservice1:

package com.example.service;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log; public class MyService extends Service {
@Override//创建服务时调用,在服务没有关闭之前,只执行一次
public void onCreate() {
// TODO Auto-generated method stub
Log.i("info", "onCreate");
super.onCreate();
}
@Override//创建服务后自动调用
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
Log.i("info", "onStartCommeand"); return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
Log.i("info", "onDestroy");
super.onDestroy();
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
} }

Myservice2:

package com.example.service;

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log; public class MyService2 extends Service {
@Override//创建服务时调用,在服务没有关闭之前,只执行一次
public void onCreate() {
// TODO Auto-generated method stub
Log.i("info", "onCreate");
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
Log.i("info", "onStartCommeand"); return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
Log.i("info", "onDestroy");
super.onDestroy();
}
//IBindler是一个接口,Binder是其实现类
class MyBinder extends Binder{
//返回一个service对象,给实例源
public MyService2 getService(){
return MyService2.this;
}
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return new MyBinder();//返回一个Binder的子类对象
}
public void music_Start(){
Log.i("info", "播放音乐");
}
public void music_Pause(){
Log.i("info", "暂停播放音乐");
} }

MainActivity:

package com.example.service;

import com.example.service.MyService2.MyBinder;
import com.example.servies.R; import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
/**
* Service:(需注册)
* 定义:
* -应用程序组件
* -后台运行,不可见,没有界面
* -优先级高于Activity
* 用途:
* - 播放音乐,记录地理位置信息的改变,监听某种动作
* 注意:
* -service不是一个单独的进程,一般和应用程序运行在同一个进程中,除非进行指定
* -运行在主线程,不能用它来做耗时操作
* -可以在服务中开一个线程,在线程中做耗时动作
* start方式特点:
* -服务跟启动源没有关系
* -无法得到服务对象
*
* Bind方式特点:(可以对service对象进行数据处理)
* -通过Ibinder接口实例,返回一个ServiceConnection对象给实例源
* -通过ServiceConnection对象的相关方法可以得到service对象
* !!!注意:绑定后续解绑,否则退出程序后报错
*
* 生命周期:
* start方式 startService()-->onCreate()-->Service running-->onDestroy()-->Service shut down
* Bind方式 bindService()-->onCreate()-->Clients are bound to service-->onUnbind()-->onDestroy()-->Service shut down
*
*
* @author Administrator
*
*/
public class MainActivity extends Activity { private Intent intent1;
private MyService2 service;
ServiceConnection conn = new ServiceConnection(){ @Override//当服务跟启动源连接的时候 会自动回调
public void onServiceConnected(ComponentName name, IBinder binder) {
// TODO Auto-generated method stub
service = ((MyBinder)binder).getService();
} @Override//当服务跟启动源断开的时候会自动回调
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub } };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void doClick(View view){
switch(view.getId()){
case R.id.service_start:
intent1 = new Intent(MainActivity.this,MyService.class);
startService(intent1);
break;
case R.id.service_stop:
stopService(intent1);
break;
case R.id.service_bind:
//如果调用了startService(intent)方法,活动结束后必须关闭
Intent intent2 = new Intent(MainActivity.this,MyService2.class);
bindService(intent2,//确定连接的服务
conn,//接收服务对象,自动调用里面的方法
BIND_AUTO_CREATE); //自动创建服务
break;
case R.id.music_start:
service.music_Start();
break;
case R.id.music_pause:
service.music_Pause();
break;
case R.id.service_unbind:
unbindService(conn);//解除绑定,当没有绑定时,解除绑定会报错
break;
}
} }

Android_Service的更多相关文章

  1. Android_Service组件详解

    1.Service概述 Service服务是一个没有用户界面的在后台运行执行操作的应用组件,其它组件可以通过Intent意图启动这个Service去完成特定的功能,比如通过Service可以完成播放音 ...

  2. Android_Service详解及实例

    转自:http://blog.csdn.net/guolin_blog/article/details/11952435    http://blog.csdn.net/guolin_blog/art ...

  3. Android_Service的一些零散知识点_1

    service与线程不甚相同,service是Android提供的可供一个允许常驻后台的组件. 可通过StartService()启动Service和BindService()启动Service St ...

  4. 启动和停止Service

    activity_main <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" ...

随机推荐

  1. 【HDOJ】1356 The Balance

    扩展欧几里得的应用. /* 1356 */ #include <iostream> #include <sstream> #include <string> #in ...

  2. oracle删除列

    ALTER TABLE 表名 DROP COLUMN 列名;

  3. bzoj1176 2683

    我的第一道cdq分治题清明做了一下cdq分治的几道题,感觉这个东西实在是太厉害了离线大法好!关于几个经典的非数据结构做法具体可以看xhr神犇2013年的论文应用cdq分治的前提条件是不强制在线,修改操 ...

  4. easyui datagrid隔行变色

    属性striped设置为true,即striped:true. 如果想更改颜色,可以更改easyui.css中的.datagrid-row-alt样式.

  5. HTMLParser 使用详解

    htmlparser是一个纯的java写的html解析的库,它不依赖于其它的java库文件,主要用于改造或   提取html.它能超高速解析html,而且不会出错.现在htmlparser最新版本为2 ...

  6. spring--JDBC的支持--7

    7.1  概述 7.1.1  JDBC回顾 传统应用程序开发中,进行JDBC编程是相当痛苦的,如下所示: java代码: 以上代码片段具有冗长.重复.容易忘记某一步骤从而导致出错.显示控制事务.显示处 ...

  7. JavaScript基本概念(一) v0.5

    摘要:先简单介绍ECMAScript的语法(如果有其他类C的经验,这个很好理解),接着介绍了ECMAScript的数据类型:Number.Boolean.String.Undefined和Null类型 ...

  8. HDOJ-ACM1023(JAVA)

    题意:输入栈的大小,输出可能的出栈顺序的个数. 这道题,如果做了1022,那就只要在上面改改就行了, 第一想法是加上全排列-----结果是正确的,但是绝对会超时 验证性的实现了:(Time Limit ...

  9. advanced dom scripting dynamic web design techniques Part One DOM SCRIPTING IN DETAIL CHAPTER 1 DO IT RIGHT WITH BEST PRACTICES

    You’re excited; your client is excited. All is well. You’ve just launched the client’s latest websit ...

  10. phpstorm映射远程项目

    项目要设置为default,否则自动更新会失败:type要选正确 development path和web path都要设置 options选项中选ctrl+s自动保存,且下方没告警