IntentService:使用方式

1、定义
  1. Android Service 的封装类。
2、作用
  1. 按顺序,在后台执行线程任务,执行完自动关闭服务。
3、工作流程

在这里插入图片描述

4、具体使用
public class IntentServiceActivity extends AppCompatActivity {

    private LocalBroadcastManager mLocalBroadcastManager;
    private MyBroadcastReceiver mMyBroadcastReceiver;
    private IntentFilter mIntentFilter;
    private AppCompatButton countBtn;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_intentservice);
        mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
        mMyBroadcastReceiver = new MyBroadcastReceiver();
        mIntentFilter = new IntentFilter("com.strugglelin.basedemo.service.MyIntentService");
        mLocalBroadcastManager.registerReceiver(mMyBroadcastReceiver, mIntentFilter);

        countBtn = findViewById(R.id.countBtn);
        findViewById(R.id.startIntentService).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(IntentServiceActivity.this, MyIntentService.class);
                intent.putExtra("maxCount", 5);
                startService(intent);
            }
        });
    }

    private class MyBroadcastReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            int count = intent.getIntExtra("count", -1);
            countBtn.setText(String.format(Locale.CHINA, "延迟 %d 秒", count));
        }
    }
}

public class MyIntentService extends IntentService {

    private LocalBroadcastManager mLocalBroadcastManager;
    private Intent mIntent;

    public MyIntentService() {
        super("MyIntentService");
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Log.d("tag", "onCreate");
        mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
        mIntent = new Intent("com.strugglelin.basedemo.service.MyIntentService");
    }

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

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

    @Override
    protected void onHandleIntent(Intent intent) {
        Log.d("tag", "onHandleIntent");
        int maxCount = intent.getIntExtra("maxCount", -1);
        for (int i = 0; i <= maxCount; i++) {
            try {
                Thread.sleep(1000L);
                sendData(i);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    private void sendData(int count) {
        mIntent.putExtra("count", count);
        mLocalBroadcastManager.sendBroadcast(mIntent);
    }
}

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.AppCompatButton
        android:id="@+id/startIntentService"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="startIntentService"
        android:textAllCaps="false" />

    <android.support.v7.widget.AppCompatButton
        android:id="@+id/countBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="初始化"
        android:textAllCaps="false" />
</android.support.v7.widget.LinearLayoutCompat>
5、IntentService、Service、Thread 比较
类型特点
IntentService运行在工作线程,顺序执行完自动关闭服务,优先级高
Service运行在主线程,手动关闭服务,优先级高
普通线程如:Thread,运行在工作线程,优先级低
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值