• Service


    Service与Activity都是Android系统中的运行单元,只是后者有接口布局文件作为其操作界面,而前者无操作界面,专门负责运行一项制定的工作,直到完成或被其控制程序停止。

    Service与Thread很相似,都是独立运行的对象,也是幕后运行无界面,Thread是java内建类,而Service是Android根据其特性和架构设计的,所以在Android中优先建议使用Service。

    Service的两种调用方法:startService();bindService()。

    Service的生命周期:

    startService():onCreate()、onStart()/onStartCommand()(Android2.0以前只有onStart())、onDestroy()

    bindService():onCreate()、onStart()/onStartCommand()(Android2.0以前只有onStart())、onUnbind()、onDestroy()

    1、新建一个继承Service的新类,利用右键Source > Override/Implement Methods 重写onCreate()、onStartCommand()、onDestroy()、onUnbind():

     1 package com....;
     2 
     3 import android.app.Service;
     4 import android.content.Intent;
     5 import android.os.Binder;
     6 import android.os.IBinder;
     7 
     8 public class MyService extends Service {
     9 
    10     public class LocalBinder extends Binder
    11     {
    12         MyService getService() {
    13             return MyService.this;
    14         }
    15         
    16     }
    17     private LocalBinder mLocBin = new LocalBinder();
    18     @Override
    19     public IBinder onBind(Intent arg0) {
    20         // TODO Auto-generated method stub
    21         return mLocBin;
    22     }
    23 
    24     @Override
    25     public void onCreate() {
    26         // TODO Auto-generated method stub
    27         super.onCreate();
    28     }
    29 
    30     @Override
    31     public void onDestroy() {
    32         // TODO Auto-generated method stub
    33         super.onDestroy();
    34     }
    35 
    36     @Override
    37     public int onStartCommand(Intent intent, int flags, int startId) {
    38         // TODO Auto-generated method stub
    39         return super.onStartCommand(intent, flags, startId);
    40     }
    41 
    42     @Override
    43     public boolean onUnbind(Intent intent) {
    44         // TODO Auto-generated method stub
    45         return super.onUnbind(intent);
    46     }
    47 
    48 }

    其中onBind()方法必须传回类中建立的一个LocalBinder类的对象,否则无法完成Bind Service的动作。LocalBinder是内部类,继承Binder类,其中有getService方法,传回MyService对象,就是根据这个方法才能调用bindService()时取得MyService对象。

    2、在AndroidManifest.xml中注册Service:

    <service android:name=".MyService" android:enabled="true" />

    3、在程序中启动Service:

    startService():

            Intent it = new Intent(类名称.this,Service类名称.class);
            startService(it);
    ...
    stopService(it);

    bindService():

    首先建立ServiceConnection对象,取得Service对象,并存入定义在主程序中的MyService属性;

    onServiceConnected()在bind Service时系统调用;onServiceDisconnected()在Service对象不正常结束时运行,一般情况不允许。

        private  ServiceConnection mServConn = new ServiceConnection() {
            
            @Override
            public void onServiceDisconnected(ComponentName name) {
                // TODO Auto-generated method stub
                
            }
            
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                // TODO Auto-generated method stub
    //取得Service对象 MyService mMyServ = ((MyService.LocalBinder)service).getService(); } };

    2、建立Intent对象并指定要启动的Service类,调用bindService()。

            Intent it = new Intent(类名称.this,Service类名称.class);
            bindService(it, mServConn, BIND_AUTO_CREATE);
            ...
            unbindService(mServConn);
  • 相关阅读:
    MATLAB相机标定转XMl代码
    摄像头录制及调试
    opencv之常用还是忘,那咋办嘛
    Python贪吃蛇
    Linux指令
    寻找最小矩形边框--OpenCv
    2019 C语言测试
    opencv之重映射
    指针的总计
    图像变换之霍夫变换
  • 原文地址:https://www.cnblogs.com/ghimtim/p/4760638.html
Copyright © 2020-2023  润新知