Android应用开发基础篇(6)-----Service
来源:互联网 发布:数据库删除表语句 编辑:程序博客网 时间:2024/06/05 19:54
一、概述
我们知道,Service是Android的四大组件之一。在我看来,Service可以理解为一种在后台运行的服务,但它不是运行在一个独立的线程中,而是运行在主线程里,当程序有比较“繁重”的任务要执行时,就可以把它放在Service中执行。Service也有自己的生命周期,与Activity有点类似,但它没有用户界面,只在后台运行。
二、要求
编写一个带有Service的程序,在程序中,用户可以启动和停止该服务,可以实现与Service之间的通信。
三、实现
新建工程MyService,修改/res/layout/main.xml文件,在里面添加3个Button按钮和1个TextView文本,完整的main.xml文件如下:
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="fill_parent" 4 android:layout_height="fill_parent" 5 android:orientation="vertical" > 6 7 <Button 8 android:id="@+id/button" 9 android:layout_width="fill_parent"10 android:layout_height="wrap_content"11 android:text="启动服务"12 android:textSize="15px"13 />14 15 <Button16 android:id="@+id/sbutton"17 android:layout_width="fill_parent"18 android:layout_height="wrap_content"19 android:text="停止服务"20 android:textSize="15px"21 />22 23 <Button24 android:id="@+id/gbutton"25 android:layout_width="fill_parent"26 android:layout_height="wrap_content"27 android:text="获取服务信息"28 android:textSize="15px"29 />30 31 <View32 android:layout_width="fill_parent"33 android:layout_height="70px"34 />35 36 <TextView37 android:id="@+id/mtextview"38 android:layout_width="fill_parent"39 android:layout_height="wrap_content"40 android:gravity="center_horizontal"41 android:textSize="20px"42 android:textColor="#0000FF"43 />44 45 </LinearLayout>
新建MyService.java文件,编写一个继承自Service的MyService类,在该类中编写一个继承自Binder的MyBinder类,用来与Client之间的通信,在MyBinder类中编写一个reTurnService()方法,用来返回信息给Client,完整的
MyService.java文件如下:
1 package com.nan.service; 2 3 import android.app.Service; 4 import android.content.Intent; 5 import android.os.Binder; 6 import android.os.IBinder; 7 import android.util.Log; 8 9 public class MyService extends Service10 {11 final String TAG = "MyService";12 13 MyBinder mMyBinder = new MyBinder();14 15 @Override16 public IBinder onBind(Intent arg0)17 {18 // TODO Auto-generated method stub19 //返回对象给Client20 return mMyBinder;21 }22 23 @Override24 public boolean onUnbind(Intent intent)25 {26 27 return true;28 }29 30 @Override31 public void onCreate()32 {33 super.onCreate();34 Log.v(TAG, "++ onCreate() ++");35 }36 37 @Override38 public int onStartCommand(Intent intent, int flags, int startId)39 {40 super.onStartCommand(intent, flags, startId);41 Log.v(TAG, "++ onStartCommand() ++");42 return flags;43 }44 45 @Override46 public void onDestroy()47 {48 super.onDestroy();49 Log.v(TAG, "++ onDestroy() ++");50 }51 52 //自己定义一个继承自Binder的类53 public class MyBinder extends Binder54 {55 //返回Service中的信息56 public String reTurnService()57 {58 return "This String is from Servive!";59 }60 }61 62 }
接着,修改MyServiceActivity.java文件,定义1个MyService.MyBinder对象和1个ServiceConnection对象,实现
ServiceConnection中的onServiceConnected()方法,该方法在bindService()后自动被调用,接收MyService传来的Binder对象。其他内容在程序中有详细注释,完整的MyServiceActivity.java文件如下:
1 package com.nan.service; 2 3 import com.nan.service.MyService.MyBinder; 4 import android.app.Activity; 5 import android.content.ComponentName; 6 import android.content.Intent; 7 import android.content.ServiceConnection; 8 import android.os.Bundle; 9 import android.os.IBinder; 10 import android.view.View; 11 import android.widget.Button; 12 import android.widget.TextView; 13 14 15 public class MyServiceActivity extends Activity 16 { 17 private Button mButton = null; 18 private Button sButton = null; 19 private Button gButton = null; 20 private TextView mTextView = null; 21 //定义一个MyBinder对象 22 private MyService.MyBinder mBinder; 23 //定义一个ServiceConnection对象 24 private ServiceConnection mServiceConnection; 25 private Intent mIntent = new Intent(); 26 27 /** Called when the activity is first created. */ 28 @Override 29 public void onCreate(Bundle savedInstanceState) 30 { 31 super.onCreate(savedInstanceState); 32 setContentView(R.layout.main); 33 34 mButton = (Button)findViewById(R.id.button); 35 sButton = (Button)findViewById(R.id.sbutton); 36 gButton = (Button)findViewById(R.id.gbutton); 37 mTextView = (TextView)findViewById(R.id.mtextview); 38 39 //设置按钮动作处理 40 mButton.setOnClickListener(new View.OnClickListener() 41 { 42 43 @Override 44 public void onClick(View v) 45 { 46 // TODO Auto-generated method stub 47 //设置要启动Service类 48 mIntent.setClass(MyServiceActivity.this, MyService.class); 49 //绑定(建立)这个Service 50 bindService(mIntent,mServiceConnection,BIND_AUTO_CREATE); 51 } 52 }); 53 54 sButton.setEnabled(false); 55 //设置按钮动作处理 56 sButton.setOnClickListener(new View.OnClickListener() 57 { 58 59 @Override 60 public void onClick(View v) 61 { 62 // TODO Auto-generated method stub 63 //取消与Service的连接 64 unbindService(mServiceConnection); 65 mButton.setEnabled(true); 66 sButton.setEnabled(false); 67 gButton.setEnabled(false); 68 } 69 }); 70 71 gButton.setEnabled(false); 72 //设置按钮动作处理 73 gButton.setOnClickListener(new View.OnClickListener() 74 { 75 76 @Override 77 public void onClick(View v) 78 { 79 // TODO Auto-generated method stub 80 //显示从Service传回来的信息 81 mTextView.setText(mBinder.reTurnService()); 82 } 83 }); 84 85 //与Handler类的使用类似 86 mServiceConnection = new ServiceConnection() 87 { 88 89 @Override 90 //当与Service建立连接后,这个函数自动被调用 91 public void onServiceConnected(ComponentName name, IBinder service) 92 { 93 // TODO Auto-generated method stub 94 //获得从Service传来IBinder对象 95 mBinder = (MyBinder) service; 96 sButton.setEnabled(true); 97 mButton.setEnabled(false); 98 gButton.setEnabled(true); 99 }100 101 @Override102 //当与Service断开连接后,这个函数自动被调用103 public void onServiceDisconnected(ComponentName name)104 {105 // TODO Auto-generated method stub106 107 }108 109 };110 111 }112 113 }
最后,在AndroidManifest.xml文件,在里面添加一个Service声明,如下:
<service android:name=".MyService" android:exported="true" />
运行该程序:
点击一下“启动服务”按钮:
再点击“获取服务信息”按钮,会显示一串字符串,说明已经从Service中获取到了信息:
点击“停止服务”按钮:
完成。
- Android应用开发基础篇(6)-----Service
- Android基础--Service应用
- Android Service 组件基础应用
- Android基础之应用Service
- Android开发基础-service使用
- Android应用开发基础
- android应用基础开发
- Android应用:Service开发实例(三)之Service的具体应用方法
- android应用开发详解(十七)---------------service初级
- Android应用开发基础篇(10)-----Menu(菜单)
- Android应用开发基础篇(10)-----Menu(菜单)
- Android应用开发基础篇(14)-----自定义标题栏
- Android应用开发基础篇(12)-----Socket通信
- Android应用开发基础篇(7)-----BroadcastReceiver
- Android应用开发基础篇(5)-----Handler与多线程
- Android应用开发基础篇(5)-----Handler与多线程
- java开发Android应用后台(基础)
- Android应用开发学习笔记之Service
- Android应用开发基础篇(7)-----BroadcastReceiver
- Linux网络编程中的地址问题
- Android应用开发基础篇(5)-----Handler与多线程
- #分享资料#—《UNIX TOOLBOX》
- mysql的数据文件
- Android应用开发基础篇(6)-----Service
- eclipse cdt 中文乱码和不显示printf输出
- Android应用开发基础篇(2)-----Notification(状态栏通知)
- 2012.8.16
- 基于Socket的低层次Java网络编程
- Handler sendMessage 与 obtainMessage (sendToTarget)比较
- 小布老师所有视频 地址
- Linux多线程编程
- Linux下C语言实现LCD屏幕截图