android IntentService 简要的说明


最近仔细的看了看IntentService 和Service的区别,这里主要说一下IntentService 。

1.Service 不用多说 大家都经常用的 但是IntentService可能不是经常用到,但是在特定的情况下IntentService用起来要比Service方便不少。

1.1例如,我们的程序里边有俩个耗时的操作,第一个耗时操作命名为first ,第二个耗时操作命名为second,执行逻辑是first执行完毕以后second才能执行,这个时候用IntentService就特别方便了。可能只这样说大家不太明白,上代码加解释大家就会很容易看懂。


package com.example.zxy.android60test.service;

import android.app.IntentService;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;

/**
 * Created by ZhangXueYang on 2016-8-29.
 * IntentService  1.启动以后 完成执行的任务 服务自动关闭,2.多任务的时候 会形成任务队列 会按顺序逐个去执行
 */
public class ServiceIntentDemo extends IntentService {


    /**
     * 必须实现方法的重构 而且不能有参数 否则Manifest 注册时会找不到该类
     */
    public ServiceIntentDemo() {
        super("test");
        Log.e("181", "test");
    }

    @Override
    protected void onHandleIntent(Intent intent) {//IntentSerivce核心回调方法 主要的代码逻辑都在这里
    
        //Intent是从Activity发过来的,携带识别参数,根据参数不同执行不同的任务
        
        String msg = intent.getStringExtra("msg");
        if (msg.equals("first")) {
            Log.e("181", "执行第 一 个任务");
        } else if (msg.equals("second")) {
            Log.e("181", "执行第 二 个任务");
        }

        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }


    }

    @Override
    public void onStart(Intent intent, int startId) {
       Log.e("181", "启动服务1");
        super.onStart(intent, startId);

    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.e("181", "启动服务2");
        return super.onStartCommand(intent, flags, startId);

    }


    @Override
    public void onCreate() {
        super.onCreate();
        Log.e("181", "创建服务");
    }

    @Override
    public IBinder onBind(Intent intent) {
        return super.onBind(intent);
    }

    @Override
    public void onDestroy() {//当所有线程执行完毕,IntentService会自动关闭,不用我们子调取一次销毁方法,是不是很方便啊!
        Log.e("181", "销毁服务");
        super.onDestroy();
    }
}
package com.example.zxy.android60test;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;



/**
 * Created by ZhangXueYang on 2016-8-11.
 */
public class AAAA extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //可以启动多次,每启动一次,就会新建一个work thread,但IntentService的实例始终只有一个
        //启动第一个耗时服务
        Intent intentf = new Intent("com.test.intentservice");
        intentf.putExtra("msg", "first");
        startService(intentf);
        //启动第二个耗时服务
        Intent intents = new Intent("com.test.intentservice");
        intents.putExtra("msg", "second");
        startService(intents);
    }
}最后别忘了在Manifest注册IntentionService

下面是运行截图,由截图可以看出虽然我们调用了俩次startService 但是IntentService 只创建了一个实例,而且执行完毕work队列以后自动销毁了IntentService.



阅读更多
想对作者说点什么? 我来说一句

IntentService实例

2013年03月17日 43KB 下载

没有更多推荐了,返回首页

不良信息举报

android IntentService 简要的说明

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭