码迷,mamicode.com
首页 > 移动开发 > 详细

android后台服务的基本用法

时间:2016-03-26 18:32:40      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:

了解了安卓多线程编程的技术之后,作为安卓的四大组件之一,是十分重要的。

定义一个服务

首先看一下如何在项目中定义一个服务,

public class MyService extends Service {
    @Override
    public void onCreate() {
        super.onCreate();
        Log.d("myservice","oncreate");
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d("myservice","command");
        return super.onStartCommand(intent, flags, startId);

    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d("myservice","destroy");
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}

这里我们又重写了onCreate(),onStartCommand()和onDestroy()这个三个方法,他们是每个服务中最常用的三个方法,其中onCreate()方法会在服务创建的时候调用,onStartCommand()方法会在每次服务启动的时候调用,onDestroy()方法会在服务销毁的时候调用,通常我们服务销毁时,我们又应该在onDestroy方法中去回收那些不再使用的资源。

每一个服务必须要再陪你文件中注册之后才能使用

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

这样一个服务就完成了。

启动和停止服务:

定义好了服务之后,接下来就是如何去启动以及停止这个服务了,启动和停止的方法主要是借助Intent来实现的,

public class MainActivity extends Activity  implements View.OnClickListener {
  private  Button startService;
    private  Button stopService;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        startService=(Button)findViewById(R.id.start_service);
        stopService=(Button)findViewById(R.id.stop_service);
        startService.setOnClickListener(this);
        stopService.setOnClickListener(this);


    }


    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.start_service:
                Intent startIntent=new Intent(this,MyService.class);
                startService(startIntent);
                break;
            case R.id.stop_service:
                Intent stopIntent=new Intent(this,MyService.class);
                stopService(stopIntent);
                break;
            default:
                break;
        }

    }

运行效果技术分享

onCreate()和onStartCommand()到底有什么区别呢?

其实onCreate()方法是再服务第一次创建的时候调用的,而onStartCommand()方法是再每次启动服务的时候调用的。

活动和服务进行通信

为了实现这个功能我们创建一乐意专门的Binder对象来下载功能进行管理,修改MyService中的代码,

  private  DownloadBinder binder=new DownloadBinder();
    
    class  DownloadBinder extends Binder{
        public  void  startDownload(){
            Log.d("MyService","startDownload executed");
        }
        public  int  getProgress(){
            Log.d("Myservice","getProgress execute");
            return 0;
        }
    }
 private  Button startService;
    private  Button stopService;
    private Button bindService;
    private Button unbindService;

    private  MyService.DownloadBinder downloadBinder;
    private ServiceConnection connection=new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            downloadBinder=(MyService.DownloadBinder)service;
            downloadBinder.startDownload();
            downloadBinder.getProgress();
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {

        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        startService=(Button)findViewById(R.id.start_service);
        stopService=(Button)findViewById(R.id.stop_service);
        startService.setOnClickListener(this);
        stopService.setOnClickListener(this);
        bindService=(Button)findViewById(R.id.bind_service);
        unbindService=(Button)findViewById(R.id.unbinder_Service);
        bindService.setOnClickListener(this);
        unbindService.setOnClickListener(this);


    }


    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.start_service:
                Intent startIntent=new Intent(this,MyService.class);
                startService(startIntent);
                break;
            case R.id.stop_service:
                Intent stopIntent=new Intent(this,MyService.class);
                stopService(stopIntent);
                break;
            case R.id.bind_service:
                Intent bindIntent=new Intent(this,MyService.class);
                bindService(bindIntent,connection,BIND_AUTO_CREATE);
                break;
            case  R.id.unbinder_Service:
                unbindService(connection);
                break;
            default:
                break;
        }

    }

可以看大我们首先创建了一个serviceConnection的匿名类,在里面重写了onServiceConnectd()方法和onServiceDisconnected()方法,这两个方法会砸活动与服务成功绑定以及接触绑定的时候调用。

 

服务的最佳实践--后台执行的定时任务:

安卓中的定时任务一般有两种实现方式,一种使用java api里提供的timer类,一种是使用安卓的alarm机制,这两种方式在多数情况下都能实现的类似的效果,但是Timer有一个明显的短板,它并不太合适英语那些需要长时间在后台运行的定时任务。

android后台服务的基本用法

标签:

原文地址:http://www.cnblogs.com/aizhiyuan/p/5323370.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!