https://developer.android.com/reference/android/app/Service
service的主要作用
用于在后台处理耗时操作
service的生命周期
1 callTo startService---onCreate----onStartCommand-----serviceRuning ----onStart----onDestory startService
2 callTobindService---onCreate---onBind----Clients are bound to service----onUnbind----onDestory bindService
Service 可以 开辟线程
访问网络 炒作数据库(一个没有页面的activity)
创建一个class继承service
startService
package com.androidless1.yifei.andrlidl1;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class ServiceActivity extends Service {
@Override
public void onCreate() {
Log.d(MainActivity.TAG, "Service onCreate: ");
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(MainActivity.TAG, "Service onStart: ");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
Log.d(MainActivity.TAG, "Service onDestroy: ");
super.onDestroy();
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
activity中使用startService调用service 和stopService停止service
package com.androidless1.yifei.andrlidl1;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
public static final String TAG = "MainActivity" + 123;
private Button btn1;
private Button btn2;
Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = findViewById(R.id.btn1);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
intent = new Intent(MainActivity.this,ServiceActivity.class);
startService(intent);
}
});
btn2 = findViewById(R.id.btn2);
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopService(intent);
}
});
}
}
bindService
创建一个类继承Service
package com.androidless1.yifei.andrlidl1;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class BindService extends Service {
@Override
public void onCreate() {
Log.d(MainActivity.TAG, "onCreate: ");
super.onCreate();
}
@Override
public IBinder onBind(Intent intent) {
Log.d(MainActivity.TAG, "onBind: ");
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(MainActivity.TAG, "onStartCommand: ");
return super.onStartCommand(intent, flags, startId);
}
@Override
public boolean onUnbind(Intent intent) {
Log.d(MainActivity.TAG, "onUnbind: ");
return super.onUnbind(intent);
}
@Override
public void onDestroy() {
Log.d(MainActivity.TAG, "onDestroy: ");
super.onDestroy();
}
}
bindService(intent,ServiceConnection,BIND_AUTO_CREATE)
package com.androidless1.yifei.andrlidl1;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
public static final String TAG = "MainActivity" + 123;
private Button btn1;
private Button btn2;
private Button btn3;
private Button btn4;
Intent intent;
Intent intentBind;
public ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.d(TAG, "onServiceConnected: ");
}
@Override
public void onServiceDisconnected(ComponentName name) {
Log.d(TAG, "onServiceDisconnected: ");
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn3 = findViewById(R.id.btn3);
btn4 = findViewById(R.id.btn4);
btn3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
intentBind = new Intent(MainActivity.this, BindService.class);
bindService(intentBind,mConnection,BIND_AUTO_CREATE);
}
});
btn4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
unbindService(mConnection);
}
});
}
}
如果没有bind而直接unBind会报错
bind和Unbind改为
package com.androidless1.yifei.andrlidl1;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
public static final String TAG = "MainActivity" + 123;
private Button btn1;
private Button btn2;
private Button btn3;
private Button btn4;
private Boolean isBind =false;
Intent intent;
Intent intentBind;
public ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.d(TAG, "onServiceConnected: ");
}
@Override
public void onServiceDisconnected(ComponentName name) {
Log.d(TAG, "onServiceDisconnected: ");
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = findViewById(R.id.btn1);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
intent = new Intent(MainActivity.this, ServiceActivity.class);
startService(intent);
}
});
btn2 = findViewById(R.id.btn2);
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopService(intent);
}
});
btn3 = findViewById(R.id.btn3);
btn4 = findViewById(R.id.btn4);
btn3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
intentBind = new Intent(MainActivity.this, BindService.class);
if(bindService(intentBind,mConnection,BIND_AUTO_CREATE)){
isBind =true;
};
}
});
btn4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(isBind){
unbindService(mConnection);
isBind=false;
}
}
});
}
}