zoukankan      html  css  js  c++  java
  • Android之Service

     

    系统服务(Service)

    Servicesandroidlinux,让人心动的功能,手机上也开发系统服务,当然,这还得归功于Linux系统内核。

    眼高手底,是我经常犯的毛病,在Service是又犯了,失败。用代码说话。

    创建一个Service的过程(示例)

    import android.app.Service;

    import android.content.Intent;

    import android.os.Binder;

    import android.os.IBinder;

     

     

    public class MyService extends Service {

     

       private final IBinder mBinder = new MyBinder();

       @Override

       public void onCreate() {

          super.onCreate();

       } 

     

       @Override

       public IBinder onBind(Intent intent) {

          // TODO Auto-generated method stub

          return mBinder;

       }

     

       public class MyBinder extends Binder {

          MyService getServices() {

             return MyService.this;

          }

       }

      

       @Override

       public void onStart(Intent intent, int startId) {

          super.onStart(intent, startId);

       }

      

       @Override

       public void onDestroy() {

          super.onDestroy();

       }

     

    }

    上面示例代码完成较完成的演示了如何创建一个Serivce及重量的几个方法(生命周期)

    onCreate():当第一次创建服务时,系统自动调用此方法。一般服务的的所有初始化操作代码放到此块中。

    onStart(Intent intent, int startId)API文档上说此方法已经过时,推荐使用int onStartCommand (Intent intent, int flags, int startId)

    暂时还没有搞明白onStartCommand

    OnStart()方法,当客户端启动或每次绑定服务时由系统自动调用。

    onDestroy():在服务注销时系统自动调用,一些清理工作在此完成。

    服务写完之后,还必须在AndroidMainifest.xml中注册。

    <service android:name="cn.myandroid.MyService" />

    如果服务中用到了一些权限,还必须注册相应的<uses-permission>

    Ok,到此一个服务基本不创建完成。下面介绍如果在客户端启动一个服务。

    public class MyActivity extends Activity {

     

       private MyService mService;

       private static boolean ISRUNNING = false;

     

       @Override

       public void onCreate(Bundle savedInstanceState) {

          super.onCreate(savedInstanceState);

          startMyService();// 启动

       }

     

       @Override

       public void onResume() {

          super.onRestart();

     

          if (ISRUNNING) {

             bindMyService();

          }

       }

     

       @Override

       public void onDestroy() {

          super.onDestroy();

    //    if (ISRUNNING) {

    //       unbindMyService();

    //    }

       }

      

     

       private ServiceConnection mConnection = new ServiceConnection() {

          @Override

       public void onServiceConnected(ComponentName name, IBinder service) {

             // TODO Auto-generated method stub

             mService =

    ((MyService.MyBinder)service).getServices();

          }

     

          @Override

          public void onServiceDisconnected(ComponentName name) {

             // TODO Auto-generated method stub

          }

       };

     

    Intent intent = new Intent(MyActivity.this, MyService.class);

       // 启动服务

       private void startMyService() {

          startService(intent);

          ISRUNNING = true;

       }

     

       // 绑定

       private void bindMyService() {

    bindService(intent, mConnection,Context.BIND_AUTO_CREATE);

       }

     

       // 取消绑定

       private void unbindMyService() {

          unbindService(mConnection);

       }

     

       private void stopMyService() {

          stopService(intent);

          ISRUNNING = false;

       }

     

    }

    上述代码展示了一个ActivityClient)如何启动并绑定一个服务的。主要是利用了Activity的生命周期来创建、绑定、取消绑定一个服务。

    上面代码中没有没用调用stopMyService()退出个服务,可根据你的需要进行调用。

  • 相关阅读:
    【LeetCode】Rotate Image
    【LeetCode】Combinations
    【LeetCode】Minimum Depth of Binary Tree
    【LeetCode】Reverse Nodes in k-Group
    【LeetCode】Reverse Linked List II
    【LeetCode】Insert Interval
    【LeetCode】Insertion Sort List
    python之列表生成式
    python 模块和模块sys.argv
    python 异常处理
  • 原文地址:https://www.cnblogs.com/wservices/p/1755094.html
Copyright © 2011-2022 走看看