1、定义
- Android Service 的封装类。
2、作用
- 按顺序,在后台执行线程任务,执行完自动关闭服务。
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,运行在工作线程,优先级低 |