
绑定服务 服务中通过定义Binder对象的子类让这个子类成为桥梁 在onBind()中返回子类对象
这样就可以在activity中调用这个子类的方法
在Activity中通过ServiceConnection获取这个对象并向下转型为该子类对象 y与Activity绑定的服务当Activity结束的时候服务也会跟着结束
timer.cancel()会结束timerTask中的所有任务
NotifyManager.cancel(2) 2是对应的通知的id 会结束对应的通知
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.View; import com.qf.service03_bindservice.TimerService.TimerBinder; public class MainActivity extends Activity { //澹版槑Binder瀛愮被瀵硅薄
TimerBinder timerBinder; //3. 瀹炰緥鍖朣erviceConnection鎺ュ彛锛堢粦瀹氭湇鍔$粍浠舵椂浣跨敤鐨勫洖璋冩帴鍙o級
ServiceConnection conn=new ServiceConnection(){
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO 缁戝畾鎴愬姛鐨勬柟娉�
timerBinder=(TimerBinder) service;
} @Override
public void onServiceDisconnected(ComponentName name) {
// TODO 涓庣粦瀹氭湇鍔$粍浠舵柇寮�繛鎺ワ紙鍙戠敓鐨勬椂鏈猴細鐢变簬绯荤粺鍘熷洜閫犳垚浜嗘湇鍔$粍浠跺仠姝㈡垨閿�瘉锛� timerBinder=null;
}
}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} public void bindService(View v) {
//缁戝畾鏈嶅姟缁勪欢
bindService(new Intent(getApplicationContext(),TimerService.class),
conn, BIND_AUTO_CREATE); //BIND_AUTO_CREATE鏍囪瘑琛ㄧず锛氱粦瀹氱殑鏈嶅姟缁勪欢濡傛灉涓嶅瓨锛屽垯浼氳嚜鍔ㄥ垱寤猴紝
//娉細鐢眀indService鏂瑰紡鍚姩鐨凷ervice锛屽叾鐢熷懡鍛ㄦ湡浼氬彈鍒扮粦瀹氱粍浠剁殑褰卞搷锛屽嵆褰撶粦瀹氱粍浠禔ctivity閿�瘉鏃讹紝Service涔熶細鍋滄
} public void unbindService(View v) {
unbindService(conn); //瑙i櫎缁戝畾
} public void startTime(View v) {
if(timerBinder!=null){
timerBinder.start();
}
} public void stopTime(View v) {
if(timerBinder!=null){
timerBinder.stop();
}
} }
MainActivity.java
import java.util.Timer;
import java.util.TimerTask; import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.support.v4.app.NotificationCompat;
import android.util.Log; public class TimerService extends Service { private Timer timer; //瀹氭椂鍣�
private NotificationManager notifyMgr;
@Override
public void onCreate() {
super.onCreate();
Log.i("debug", "--onCreate--"); timer=new Timer(); notifyMgr=(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
} @Override
public IBinder onBind(Intent intent) {
Log.i("debug", "--onBind--");
return new TimerBinder();//2. 瀹炰緥鍖朆inder鐨勫瓙绫伙紝骞惰繑鍥�
} @Override
public boolean onUnbind(Intent intent) {
Log.i("debug", "--onUnbind--");
return super.onUnbind(intent);
} @Override
public void onDestroy() {
Log.i("debug", "--onDestroy--");
super.onDestroy();
} //1. 澹版槑Binder绫荤殑瀛愮被锛岀敤浜嶴ervice涓庣粦瀹氱殑Activity鐨勭粍浠惰繘琛岄�淇�
public class TimerBinder extends Binder{
public void start(){
Log.i("debug", "----start---"); //閫氳繃瀹氭椂鍣紝鏉ュ畨鎺掓椂闂磋鍒�
timer.schedule(new TimerTask(){
@Override
public void run() {
// TODO 鍦ㄦ寚瀹氱殑鏃堕棿鎵ц鐨勪换鍔�
NotificationCompat.Builder builder=
new NotificationCompat.Builder(getApplicationContext());
builder.setSmallIcon(android.R.drawable.ic_menu_today)
.setContentTitle("鎻愰啋")
.setContentText("鏃堕棿浜嗭紝璇ヨ捣搴婁簡....")
.setTicker("鏃堕棿浜嗭紝璇ヨ捣搴婁簡....")
.setDefaults(Notification.DEFAULT_SOUND)
.setOngoing(true); notifyMgr.notify(2, builder.build()); }
},10*1000, 5*1000); } public void stop(){
Log.i("debug", "----stop---");
//鍏抽棴鎵�湁鐨勫畾鏃朵换鍔�
timer.cancel(); notifyMgr.cancel(2);
}
} }
TimerService.java
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <Button
android:id="@+id/btn1Id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="bindService"
android:text="绑定服务" /> <Button
android:id="@+id/btn2Id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/btn1Id"
android:onClick="unbindService"
android:text="解除绑定" /> <Button
android:id="@+id/btn3Id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/btn2Id"
android:onClick="startTime"
android:text="开启定时" /> <Button
android:id="@+id/btn4Id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/btn3Id"
android:onClick="stopTime"
android:text="关闭定时" /> </RelativeLayout>
activity_main.xml