Android_Service
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的更多相关文章
- Android_Service组件详解
1.Service概述 Service服务是一个没有用户界面的在后台运行执行操作的应用组件,其它组件可以通过Intent意图启动这个Service去完成特定的功能,比如通过Service可以完成播放音 ...
- Android_Service详解及实例
转自:http://blog.csdn.net/guolin_blog/article/details/11952435 http://blog.csdn.net/guolin_blog/art ...
- Android_Service的一些零散知识点_1
service与线程不甚相同,service是Android提供的可供一个允许常驻后台的组件. 可通过StartService()启动Service和BindService()启动Service St ...
- 启动和停止Service
activity_main <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" ...
随机推荐
- 实验一DOS报告
实验一.DOS命令解释程序的编写实验 13物联网 李名贵 201306104123 一. 实验目的 (1)认识DOS: (2)掌握命令解释程序的原理: (3)掌握简单的DOS调用方法 ...
- WordPress Kernel Theme ‘upload-handler.php’任意文件上传漏洞
漏洞名称: WordPress Kernel Theme ‘upload-handler.php’任意文件上传漏洞 CNNVD编号: CNNVD-201311-127 发布时间: 2013-11-12 ...
- BrnMall多店版网上商城正式发布
前些日子一直忙于多店版网上商城系统BrnMall的开发,工作比较多,所以博客断了.这几天项目完成了,时间比较自由,所以把这段时间总结的一些关于单店版BrnShop和多店版BrnMall区别写下来,希望 ...
- 个性CMD设置方法(转载)
原文地址http://wenku.baidu.com/link?url=DB8X-eHwE_VGtggBmKsBimdzXeGI_6Ga90W9PmX2Px2eUqdXOnq7FhEIzsqBfTqT ...
- Html笔记(一)概述
Html就是超文本标记语言的简写,是最基础的网页语言 Html是通过标签来定义的语言,代码都是由标签所组成 Html代码不用区分大小写 Html代码由<html>开始</html&g ...
- linux获取目录下文件
查看当前目录下的文件: find . -type f 查看当前目录下的文件夹: find . -type d 如果文件file1不为空: if [ -s file1 ];then echo ...
- Galgame引擎编写,实现对话文本显示
class cTalk { public: cTalk(); ~cTalk(); void Init(); void Shutdown(); void SetSpeed(int speed); voi ...
- 【前端】CSS3实现弹出效果
36氪这个网站上的登录框弹出的时候挺帅气的,想知道它是怎么做的 .. 今天通过问新爷再加上自己琢磨琢磨写出一个小小Demo - 上代码 <!DOCTYPE html> <html&g ...
- HDU4607 - Park Visit(树的直径)
题目大意 给定一颗树,要求走过其中连续的k个点,使得步数最少 题解 每条边要么经过两次,要么一次,因为我们的目标就是使得走一次的边尽量的多,这样就转换成求树的直径了,求树的直径我用的是两次dfs,先随 ...
- MySQL索引和优化查询
索引和优化查询 恰当的索引可以加快查询速度,可以分为四种类型:主键.唯一索引.全文索引.普通索引. 主键:唯一且没有null值. create table pk_test(f1 int not nul ...