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" ...
随机推荐
- wcf service library
创建wcf服务库的时候,系统自动生成的代码 // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IService1”. [ServiceContract] publ ...
- c#反射重载方法(发现不明确的匹配)
GetMethod(string name) 在反射重载方法时,如果调用此重载方法,会产生 发现不明确的匹配 的错误. 解决方案如下: GetMethod("MethodName" ...
- Nagios "process_cgivars()" 单字节溢出漏洞
漏洞版本: Nagios Nagios 4.x Nagios Nagios 3.x 漏洞描述: Nagios是一款免费开放源代码的主机和服务监视软件,可使用在多种Linux和Unix操作系统下. Na ...
- sql 日期时间格式转换
Sql日期时间格式转换 sql server2000中使用convert来取得datetime数据类型样式(全) 日期数据格式的处理,两个示例: CONVERT(varchar(16), 时间一, ...
- win7 64位系统 pl/sql 无法解析指定的连接标识符解决办法
我用的是win764位,装好后,装了pl/sql 和toad,都连不上数据库,报错位“无法解析指定的连接标识符” 解决办法,经过研究发现安装目录有问题.默认会安装在“C:\Program Files ...
- 【转】Visual Studio快捷键汇总
原文网址:http://www.cnblogs.com/lanxuezaipiao/p/3451943.html Visual Studio最好用的快捷键(你最喜欢哪个) 每次在网上搜关于VS有哪些常 ...
- WCF 第五章 会话级别的实例
会话在分布式应用程序中广泛用于维护每个用户的状态.在站点或者基于站点的应用中,将每个用户的状态存储于会话中很常见.这这些情况中,用户和会话间有一个1:1比例.WCF以一个类似的概念支持服务.使用Ins ...
- 【转】由DFT推导出DCT
原文地址:http://blog.sina.com.cn/s/blog_626631420100xvxd.htm 已知离散傅里叶变换(DFT)为: 由于许多要处理的信号都是实信号,在使用DFT时由于傅 ...
- 【wuzhicms】apache 设置禁止访问某些文件或目录
[apache配置禁止访问] 1. 禁止访问某些文件/目录 增加Files选项来控制,比如要不允许访问 .inc 扩展名的文件,保护php类库: <Files ~ "\.inc$&qu ...
- unix时间戳和localtime
今天看代码的时候看到这么一段 void user::setHelpday() { int time = ::getTickCount(); m_helpday = (time +( * ))/( * ...