• 绑定服务-----------binderService TimerTask的使用


    绑定服务 服务中通过定义Binder对象的子类让这个子类成为桥梁   在onBind()中返回子类对象

    这样就可以在activity中调用这个子类的方法

    在Activity中通过ServiceConnection获取这个对象并向下转型为该子类对象 y与Activity绑定的服务当Activity结束的时候服务也会跟着结束

    timer.cancel()会结束timerTask中的所有任务   

    NotifyManager.cancel(2)  2是对应的通知的id 会结束对应的通知

     1 import android.app.Activity;
     2 import android.content.ComponentName;
     3 import android.content.Intent;
     4 import android.content.ServiceConnection;
     5 import android.os.Bundle;
     6 import android.os.IBinder;
     7 import android.view.View;
     8 
     9 import com.qf.service03_bindservice.TimerService.TimerBinder;
    10 
    11 public class MainActivity extends Activity {
    12 
    13     //澹版槑Binder瀛愮被瀵硅薄
    14     TimerBinder timerBinder;
    15     
    16     //3. 瀹炰緥鍖朣erviceConnection鎺ュ彛锛堢粦瀹氭湇鍔$粍浠舵椂浣跨敤鐨勫洖璋冩帴鍙o級
    17     ServiceConnection conn=new ServiceConnection(){
    18         @Override
    19         public void onServiceConnected(ComponentName name, IBinder service) {
    20             // TODO 缁戝畾鎴愬姛鐨勬柟娉�            
    21             timerBinder=(TimerBinder) service;
    22         }
    23         
    24         @Override
    25         public void onServiceDisconnected(ComponentName name) {
    26             // TODO 涓庣粦瀹氭湇鍔$粍浠舵柇寮�繛鎺ワ紙鍙戠敓鐨勬椂鏈猴細鐢变簬绯荤粺鍘熷洜閫犳垚浜嗘湇鍔$粍浠跺仠姝㈡垨閿�瘉锛�            timerBinder=null;
    27         }
    28     };
    29     
    30     @Override
    31     protected void onCreate(Bundle savedInstanceState) {
    32         super.onCreate(savedInstanceState);
    33         setContentView(R.layout.activity_main);
    34     }
    35 
    36     public void bindService(View v) {
    37         //缁戝畾鏈嶅姟缁勪欢
    38         bindService(new Intent(getApplicationContext(),TimerService.class),
    39                 conn, BIND_AUTO_CREATE);
    40         
    41         //BIND_AUTO_CREATE鏍囪瘑琛ㄧず锛氱粦瀹氱殑鏈嶅姟缁勪欢濡傛灉涓嶅瓨锛屽垯浼氳嚜鍔ㄥ垱寤猴紝
    42         //娉�細鐢眀indService鏂瑰紡鍚�姩鐨凷ervice锛屽叾鐢熷懡鍛ㄦ湡浼氬彈鍒扮粦瀹氱粍浠剁殑褰卞搷锛屽嵆褰撶粦瀹氱粍浠禔ctivity閿�瘉鏃讹紝Service涔熶細鍋滄� 
    43     }
    44 
    45     public void unbindService(View v) {
    46         unbindService(conn); //瑙i櫎缁戝畾
    47     }
    48 
    49     public void startTime(View v) {
    50         if(timerBinder!=null){
    51             timerBinder.start();
    52         }
    53     }
    54 
    55     public void stopTime(View v) {
    56         if(timerBinder!=null){
    57             timerBinder.stop();
    58         }
    59     }
    60 
    61 }
    MainActivity.java
     1 import java.util.Timer;
     2 import java.util.TimerTask;
     3 
     4 import android.app.Notification;
     5 import android.app.NotificationManager;
     6 import android.app.PendingIntent;
     7 import android.app.Service;
     8 import android.content.Intent;
     9 import android.os.Binder;
    10 import android.os.IBinder;
    11 import android.support.v4.app.NotificationCompat;
    12 import android.util.Log;
    13 
    14 public class TimerService extends Service {
    15 
    16     private Timer timer; //瀹氭椂鍣�    
    17     private NotificationManager notifyMgr;
    18     @Override
    19     public void onCreate() {
    20         super.onCreate();
    21         Log.i("debug", "--onCreate--");
    22         
    23         timer=new Timer();
    24         
    25         notifyMgr=(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    26     }
    27     
    28     @Override
    29     public IBinder onBind(Intent intent) {
    30         Log.i("debug", "--onBind--");
    31         return new TimerBinder();//2. 瀹炰緥鍖朆inder鐨勫瓙绫伙紝骞惰繑鍥�    
    32         }
    33     
    34     @Override
    35     public boolean onUnbind(Intent intent) {
    36         Log.i("debug", "--onUnbind--");
    37         return super.onUnbind(intent);
    38     }
    39     
    40     @Override
    41     public void onDestroy() {
    42         Log.i("debug", "--onDestroy--");
    43         super.onDestroy();
    44     }
    45     
    46     //1. 澹版槑Binder绫荤殑瀛愮被锛岀敤浜嶴ervice涓庣粦瀹氱殑Activity鐨勭粍浠惰繘琛岄�淇�    
    47     public class TimerBinder extends Binder{
    48         public void start(){
    49             Log.i("debug", "----start---");
    50             
    51             //閫氳繃瀹氭椂鍣�紝鏉ュ畨鎺掓椂闂磋�鍒�            
    52             timer.schedule(new TimerTask(){
    53                 @Override
    54                 public void run() {
    55                     // TODO 鍦ㄦ寚瀹氱殑鏃堕棿鎵ц�鐨勪换鍔�                    
    56                     NotificationCompat.Builder builder=
    57                             new NotificationCompat.Builder(getApplicationContext());
    58                     builder.setSmallIcon(android.R.drawable.ic_menu_today)
    59                             .setContentTitle("鎻愰啋")
    60                             .setContentText("鏃堕棿浜嗭紝璇ヨ捣搴婁簡....")
    61                             .setTicker("鏃堕棿浜嗭紝璇ヨ捣搴婁簡....")
    62                             .setDefaults(Notification.DEFAULT_SOUND)
    63                             .setOngoing(true);
    64                             
    65                     notifyMgr.notify(2, builder.build());
    66                     
    67                 }
    68             },10*1000, 5*1000);
    69             
    70         }
    71         
    72         public void stop(){
    73             Log.i("debug", "----stop---");
    74             //鍏抽棴鎵�湁鐨勫畾鏃朵换鍔�            
    75             timer.cancel();
    76             
    77             notifyMgr.cancel(2);
    78         }
    79     }
    80 
    81 }
    TimerService.java
     1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:paddingBottom="@dimen/activity_vertical_margin"
     6     android:paddingLeft="@dimen/activity_horizontal_margin"
     7     android:paddingRight="@dimen/activity_horizontal_margin"
     8     android:paddingTop="@dimen/activity_vertical_margin"
     9     tools:context=".MainActivity" >
    10 
    11     <Button
    12         android:id="@+id/btn1Id"
    13         android:layout_width="wrap_content"
    14         android:layout_height="wrap_content"
    15         android:onClick="bindService"
    16         android:text="绑定服务" />
    17 
    18     <Button
    19         android:id="@+id/btn2Id"
    20         android:layout_width="wrap_content"
    21         android:layout_height="wrap_content"
    22         android:layout_below="@id/btn1Id"
    23         android:onClick="unbindService"
    24         android:text="解除绑定" />
    25 
    26     <Button
    27         android:id="@+id/btn3Id"
    28         android:layout_width="wrap_content"
    29         android:layout_height="wrap_content"
    30         android:layout_below="@id/btn2Id"
    31         android:onClick="startTime"
    32         android:text="开启定时" />
    33 
    34     <Button
    35         android:id="@+id/btn4Id"
    36         android:layout_width="wrap_content"
    37         android:layout_height="wrap_content"
    38         android:layout_below="@id/btn3Id"
    39         android:onClick="stopTime"
    40         android:text="关闭定时" />
    41 
    42 </RelativeLayout>
    activity_main.xml
  • 相关阅读:
    Linux 时间同步 03 ntpdate时间同步
    Linux 时间同步 04 ntp时间同步
    Linux 时间同步 02 ntpd、ntpdate的区别
    Linux 时间同步 05 chrony时间同步
    极限编程的12个实践原则
    需要继续理解的
    java的动态代理机制详解
    动态代理详解(一)应用示例
    动态代理详解(二)原理解析
    说说Java代理模式
  • 原文地址:https://www.cnblogs.com/bimingcong/p/4822155.html
Copyright © 2020-2023  润新知