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" ...
随机推荐
- APP-PER-50022: Oracle Human Resources could not retrieve a value for the User Type profile option.
Symptoms ----------------------- AP > Setup > Organizations Show Error tips: APP-PER-50022: Or ...
- jdk1.7升级到jdk1.8后出错: [ERROR] javadoc: warning - Multiple sources of package comments found for package
from: http://blog.joda.org/2014/02/turning-off-doclint-in-jdk-8-javadoc.html [ERROR] javadoc: warnin ...
- bzoj3698
显然是有源有汇有下界最大流,不刷不知道,一刷吓一跳发现了我之前求有源有汇有下界最大流的错误,具体见我那篇介绍有下界的网络流的解题报告(bzoj2502),已经更正 ; type node=record ...
- C#程序中访问配置文件
在C#编程中,有时候会用到配置文件,那么该如何在程序中获取或修改配置文件中的相关数据呢?下面采用一个简单的C#控制台程序来说明. 新建一个C#控制台程序,打开“解决方案资源管理器”,如下图: 可以看到 ...
- poj 1084 舞蹈链(纠结题)
此题反正我自己是认为poj给的数据范围是有错的,不知道是不是自己太弱了,有大神在的话,欢迎来呸! 其实目的就在于建图,搞的我后来建了一个无比纠结的图,先建立了火柴棍和正方形的一个全图,然后再删除一些火 ...
- GIS数据格式:Coverage
转自:http://www.cnblogs.com/w2william/archive/2009/10/15/1583954.html 我之前做了一个模块,基本实现了ArcCatalog中左边树状结构 ...
- Codeforces 14D
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const i ...
- Selenium WebDriver + Grid2 + RSpec之旅(四) ----通过RSpec编写测试用例
Selenium WebDriver + Grid2 + RSpec之旅(四) ----通过RSpec编写测试用例 自动化测试和手工测试一样,是要有测试用例,有检查点和测试结果的,接下来我们通过RSp ...
- [九度OJ]1008.最短路径问题
原题链接:http://ac.jobdu.com/problem.php?pid=1008 题目描述: 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离 ...
- linux 小技巧总结
(1)linux判断文件是否存在 if [ -f filename]: then ......#要执行的语句 fi 具体例子: file=/usr/local/oracle/oradata ...