今天学了android service,记录下一些知识点。
1、Service的生命周期
2、Service两种调用方式
方式1:
activity中启动
Intent intent1=new Intent(this, MyService.class);
intent1.putExtra("intent1",1);
startService(intent1);
activity中终止
stopService(new Intent(this, MyService.class));
Service中参数调用
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Trace.d(TAG,”onStartCommand”);
if(intent!=null && intent.getIntExtra(“intent1”,0)==1) Trace.d(TAG,”onStartCommand,intent1”);
else if(intent!=null && intent.getIntExtra(“intent2”,0)==1) Trace.d(TAG,”onStartCommand,intent2”);
return START_STICKY;
}
方式2:
activity中启动
bindService(new Intent(this, MyService.class), connection,BIND_AUTO_CREATE);
private ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
Trace.d(TAG,"onServiceConnected");
//isBind=true;
binder = (MyService.MyBinder) iBinder;
binder.startDownload();
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
//isBind=false;
Trace.d(TAG,"onServiceDisconnected");
}
};
try {
unbindService(connection);
} catch (Exception e) {
e.printStackTrace();
}
activity中终止
try {
unbindService(connection);
} catch (Exception e) {
e.printStackTrace();
}
Service中方法调用
class MyBinder extends Binder{
public void startDownload(){
Trace.d(TAG,”start startDownload^^^^^^^^”);
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 30; i++) {
try {
Thread.sleep(1000);
Trace.d(TAG,”new Thread(new Runnable()),i=”+i);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
stopSelf();
}
}).start();
Trace.d(TAG,”end startDownload^^^^^^^^”);
}
3、前端服务
Intent notificationIntent=new Intent(this,MainActivity.class);
PendingIntent pendingIntent=PendingIntent.getActivity(this,0,notificationIntent,0);
Notification notification=new Notification.Builder(this)
.setSmallIcon(R.mipmap.icon)
.setLargeIcon(drawableToBitmap(getResources().getDrawable(R.mipmap.icon)))
.setContentTitle(“title”)
.setContentText(“Message”)
.setContentIntent(pendingIntent)
.getNotification();
startForeground(1,notification);