标签:
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; } } }
标签:
原文地址:http://www.cnblogs.com/fangg/p/5573889.html