美文网首页
Android Service

Android Service

作者: 狐尼克朱迪 | 来源:发表于2016-05-19 17:21 被阅读0次

    1. 概要

    Service是Android中实现程序后台运行的解决方案,它非常适合去执行不需和用户交互但是要求长期运行的任务。需要注意一下几点:

    1. 服务不是运行在一个独立的进程中,而是依赖于创建服务所在的应用程序进程;当某个应用程序进程被杀掉时,所有依赖于该进程的服务也会停止。
    2. 服务并不会自动开启线程,代码默认运行在主线程中。也就是说,需要在服务的内部手动创建子线程,并在这里执行具体的任务。

    2. Android多线程编程

    1. 在子线程中更新UI
      Android不允许在子线程中进行UI操作,其提供了一套异步消息处理机制去解决在子线程中进行UI操作:
      public class MainActivity extends Activity{
         private Handler handler = new Handler(){
          public void handleMessage(Message msg){
            switch(msg.what){
              case UPDATE_UI:
                // todo
                break;
            }
          }
         }
      
        @Override
        ...
          new Thread(new Runnable(){
            @Override
            public void run(){
              Message message = new Message();
              message.what = UPDATE_UI;
              handler.sendMessage(message);
            }
          }).start();
      }
    
    1. 使用AsyncTask:异步执行
      class Task extends AsyncTask<void, Integer, Boolean>{
        protected void onPreExecute(){// 执行前}
    
        // 程序执行在这里
        protected Boolean doInBackground(){
          // todo
          publishProgress(...);
        }
    
        // 更新中
        protected void onProgressUpdate(...){
          // todo
        }
    
        // 执行完成
        protected void onPostExecute(...){
          // todo
        }
      }
    

    3. 服务的使用

    // 定义一个服务
    public class MyService extends Service{
      @Override
      public IBinder onBind(Intent intent){
        return null;
      }
      @Override
      public void onCreate(){
        // todo
      }
      @Override
      public void onStartCommand(){
        // todo    
      }
      @Override
      public void onDestroy(){
         // todo   
      }  ...
    }
    
    // Manfiest中定义
    <service android:name=".MyService"></service>
    
    // activity中服务启动停止
    Intent intent = new Intent(this, MyService.class);
    startService(intent);
    stopservice(intent);
    

    4. 活动和服务进行通信

     // 1. 创建service
     public class MyService extends Service{
      private DownloadBinder mbinder = new DownloadBinder();
    
      class DownloadBinder extends Binder{
        public void Start(){ // todo }
        public void getProgress(){ // todo }
      }
    
      @Override
      public IBinder onBind(Intent intent){
        return return mbinder;
      }
    }
    
    //2. Activity中调用
    public class MyActivity extends Activity{
      private MyService.DownloadBinder downloadBinder;
    
      private ServiceConnection connection = new ServiceConnection(){
        @Override
        public void onServiceDisconnected(ComponentName name){}
        
        @Override
        public void onServiceConnected(ComponentName name, IBinder service){
          downloadBinder = (MyService.DownloadBinder)service;
          downloadBinder.start();
          downloadBinder.getProgress();
        } 
    
        @Override
        public void click(){
          ...
          Intent intent = new Intent(this, MyService.class);
          bindService(intent, connection, BIND_AUTO_CREATE);
          unbindServce(connection);
        } 
      }
    }
    

    相关文章

      网友评论

          本文标题:Android Service

          本文链接:https://www.haomeiwen.com/subject/vkrgrttx.html