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,運行在工作線程,優先級低
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章