Service基础
Service是Android的四大组件 之一,服务类,继承Contenxt,是后台运行的服务,没有界面
Service生命周期
Service启动方式有两种
context.startService():
context.startService ->onCreate->onStartCommand()-> context.stopService->onDestroy
启动
09-21 09:53:11.547: INFO/StartService(1554): -----------StartService
09-21 09:53:11.547: INFO/StartService(1554): -----------onCreate
09-21 09:53:11.547: INFO/StartService(1554): -----------onStartCommand
停止
onDestroy
context.bindService():与Activity通信,bindService会随着Activity 的销毁而销毁,bindService()->OnCreate()->onBind()->onUnbind()->onDestroy()
代码:startService()
public class StartService extends Service {
@Override
public void onCreate() {
Log.i("StartService","-----------onCreate");
super.onCreate(); //To change body of overridden methods use File | Settings | File Templates.
}
public StartService() {
super(); //To change body of overridden methods use File | Settings | File Templates.
Log.i("StartService","-----------StartService");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("StartService","-----------onStartCommand");
return super.onStartCommand(intent, flags, startId); //To change body of overridden methods use File | Settings | File Templates.
}
@Override
public boolean stopService(Intent name) {
Log.i("StartService", "-----------onStopService");
return super.stopService(name); //To change body of overridden methods use File | Settings | File Templates.
}
@Override
public void onDestroy() {
Log.i("StartService","-----------onDestroy");
super.onDestroy(); //To change body of overridden methods use File | Settings | File Templates.
}
}
.AndroidManifest.xml配置文件
<service
android:name=".StartService">
</service>
onBindService
public class StartService extends Service {
@Override
public void onCreate() {
Log.i("StartService","-----------onCreate");
super.onCreate(); //To change body of overridden methods use File | Settings | File Templates.
}
public StartService() {
super(); //To change body of overridden methods use File | Settings | File Templates.
Log.i("StartService","-----------StartService");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("StartService","-----------onStartCommand");
return super.onStartCommand(intent, flags, startId); //To change body of overridden methods use File | Settings | File Templates.
}
@Override
public boolean stopService(Intent name) {
Log.i("StartService", "-----------onStopService");
return super.stopService(name); //To change body of overridden methods use File | Settings | File Templates.
}
@Override
public void onDestroy() {
Log.i("StartService","-----------onDestroy");
super.onDestroy(); //To change body of overridden methods use File | Settings | File Templates.
}
private MyBinder myBinder = new MyBinder();
@Override
public boolean onUnbind(Intent intent) {
Log.i("StartService","-----------onUnbind");
return super.onUnbind(intent); //To change body of overridden methods use File | Settings | File Templates.
}
@Override
public void onRebind(Intent intent) {
Log.i("StartService","-----------onRebind");
super.onRebind(intent); //To change body of overridden methods use File | Settings | File Templates.
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Hello World, StartService"
/>
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="启动Service"
android:id="@+id/startService"/>
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="停止Service"
android:id="@+id/stopService"/>
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="绑定Service"
android:id="@+id/bindService"/>
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="解除绑定Service"
android:id="@+id/unbindService"/>
</LinearLayout>
public class MyActivity extends Activity implements View.OnClickListener {
/**
* Called when the activity is first created.
*/
private Button startService = null;
private Button stopService = null;
private Button bindService = null;
private Button unBindService = null;
private StartService.MyBinder myBinder ;
private ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
myBinder = (StartService.MyBinder)service;
myBinder.startDownload();
}
@Override
public void onServiceDisconnected(ComponentName name) {
//To change body of implemented methods use File | Settings | File Templates.
}
};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = new Intent(this,StartService.class);
startService = (Button) findViewById(R.id.startService);
stopService = (Button) findViewById(R.id.stopService);
bindService = (Button) findViewById(R.id.bindService);
unBindService = (Button) findViewById(R.id.unbindService);
stopService.setOnClickListener(this);
startService.setOnClickListener(this);
bindService.setOnClickListener(this);
unBindService.setOnClickListener(this);
}
@Override
public void onClick(View v) {
//To change body of implemented methods use File | Settings | File Templates.
switch (v.getId()){
case R.id.startService:
Intent startIntent = new Intent(this, StartService.class);
Log.i("StartService","-----------StartService");
startService(startIntent);
break;
case R.id.stopService:
Intent stopService = new Intent(this, StartService.class);
Log.i("StartService","-----------StopServiceActivity");
stopService(stopService);
break;
case R.id.bindService:
Intent bindService = new Intent();
Log.i("StartService","-----------bindServiceActivity");
bindService(bindService,connection,BIND_AUTO_CREATE);
break;
case R.id.unbindService:
Log.i("StartService","-----------unbindServiceActivity");
unbindService(connection);
break;
default:
break;
}
}
}
Service设置前台(通知栏)
public class StartService extends Service {
@Override
public void onCreate() {
Log.i("StartService","-----------onCreate");
//通知栏
Notification notification = new Notification(R.drawable.ic_launcher, "通知到", System.currentTimeMillis());
Intent notificationIntent = new Intent(this, MyActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,notificationIntent, 0);
notification.setLatestEventInfo(this, "通知标题", "通知内容", pendingIntent);
//设置前台Service
startForeground(1, notification);
Log.i("StartService", "通知");
super.onCreate(); //To change body of overridden methods use File | Settings | File Templates.
}
public StartService() {
super(); //To change body of overridden methods use File | Settings | File Templates.
Log.i("StartService","-----------StartService");
}