复习四大组件中的Service
导语:
刚面试了一家android岗位,心里有点慌呀,不过把之前重要的基础知识捡捡应该应付日常开发没什么问题吧。哈哈,要努力学习了。
Service的定义
负责消耗长时间、持续时间的工作任务,且不提供显示界面。
Service与Activity运行在同一个线程中,如果直接在Service里运行耗时操作,则会ANR(通常是因为Activity响应时间超过5秒,或者BroadcastReceiver的响应时间超过5秒)
开发Service
a)需要在AndroidManifest.xml中注册
b ) 应该使用Intent激活
Service的生命周期
a)onCreate->onStartCommand->onDestory
启动与停止Service的实际场景之一:在Activity的onCreate或者某个响应事件中使用startService()激活Service,并在Activity的onDestory方法中使用stopService()停止Service,或者在Service中执行完任务以后调用stopService中执行完任务以后调用stopSelf()以关闭自身Service。
b )onStartCommand返回值详解,
START_STICKY:(默认值)粘性的
START_NOT_STICKEY:非粘性的,当Service被意外/强行关闭以后,不会自己重新启动
START_REDRLIVER_INTENT:粘性的重新传递Intent,当Service被意外/强行关闭以后,自动重新启动,且重新得到intent参数。
START_STICKEY_COMPATIBILITY:兼容模式的粘性
代码实现
共两个类,一个是MainActivity.java,一个是MyService.java
package com.example.myapplication;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private Button start_service;
private Button stop_service;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setView();
setListiner();
}
private void setListiner() {
start_service.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent =new Intent();
intent.setClass(MainActivity.this,MyService.class);
startService(intent);
}
});
stop_service.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
Intent intent =new Intent();
intent.setClass(MainActivity.this,MyService.class);
stopService(intent);
}
});
}
private void setView() {
start_service=(Button)findViewById(R.id.btn_startService);
stop_service=(Button)findViewById(R.id.btn_stopService);
}
}
package com.example.myapplication;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
import static android.content.ContentValues.TAG;
public class MyService extends Service {
public MyService() {
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public void onCreate() {
Log.e(TAG, "onCreate: ");
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.e(TAG, "onStartCommand: ");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
Log.e(TAG, "onDestroy: " );
super.onDestroy();
}
}