什么Service 服务(Activity ContentProvider BroadCastRecerver Service)
服务是android四大组件(公司部门(客户看得见 客户看不见))
Activity—-需要与客户直接打交道的部门
Service—-在后台默默的付出
三,什么时候需要Service?
需要常驻的后台工作.就需要使用服务。
(音乐播放app 下载 不断定位传输数据 微信的消息通讯 )
三,怎么样使用服务?
1,必须在清单文件中注册
2,启动服务有两种方式:Context .startService() Context.bindService()
3 ,service是运行在主线程中。如要需要做一些耗时操作,那么必须开子线程。
四,服务的生命周期:
1,多次启动服务,onCreate方法只会调用1次
2,当一个服务如果是非正常情况,退出。那么系统会自动启动它。
3 , 当服务停止了,并全部都解绑了,服务才会被销毁。
4,服务可以启动多次,当时只会绑定一次。
5,当activity退出的时候,必须解绑服务,如果你没有解绑服务,系统会自动帮你解绑服务
package com.example.sp_service;
import android.app.Service;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
public class MainActivity extends ActionBarActivity {
private MyServiceConnection msc;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*
* SharedPreference原理
* 1)Context类是抽象类,实现类是ContextImpl,SharedPreference是一个接口
* ,实现类是SharedPreferenceImpl
* 2)SharedPreference类是单例模式,所用的客户端共享一个SharedPreference
* Content的抽象方法getSharedPreferences
* ()方法,ContextImpl类重写了该方法,创建SharedPreferences对象并放入集合
* 然后创建shared_prefres目录下xml文件,并序列化xml文件
*/
getSharedPreferences("", 0);
/*
* 2,Service 1)服务是什么? 服务是Android四大组件(公司部门,有的客户看的见,有的客户看不见)
* Activity:需要与可和直接打交道的部门 Service:在后台默默付出 2)为什么需要Service
* 需要常驻后台的工作就需要服务,比如音乐播放,退出界面后音乐依然在播放;又比如下载;比如微信、QQ的消息通讯 3)怎么样使用服务?
* 必须在清单文件中进行注册 使用Context的startService()和bindService()两种方式开启服务
* Service运行在主线程中,如果需要做一些耗时操作,那么必须开子线程
*/
}
// 通过Context开始和结束服务是向服务发一个指令
public void start(View v) {
Intent intent = new Intent(this, MusicService.class);
startService(intent);
}
public void stop(View v) {
Intent intent = new Intent(this, MusicService.class);
stopService(intent);
}
// 绑定服务是建立一个连接(联想,客户端与服务端通信也是建立一个连接);是耗时操作
public void bind(View v) {
Intent intent = new Intent(this, MusicService.class);
msc = new MyServiceConnection();
// 绑定的时候自动创建服务
bindService(intent, msc, Service.BIND_AUTO_CREATE);
}
public void unbind(View v) {
unbindService(msc);
}
// 建立 ServiceConnection类
class MyServiceConnection implements ServiceConnection {
// 建立连接
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
}
// 断开连接
@Override
public void onServiceDisconnected(ComponentName name) {
}
}
@Override
protected void onDestroy() {
// 1.如果服务绑定后没有解绑就退出会报错误,所以在退出Activity这里解绑服务,
//又因为没有绑定服务就解绑也会报错,所以解绑之前先进性非空判断
if(msc!=null){
// 解绑连接
unbindService(msc);
}
super.onDestroy();
}
}
package com.example.sp_service;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class MusicService extends Service {
/*服务的生命周期
* 1,多次启动服务,onCreate方法只会运行一次,onStartCommand会调用很多次
*/
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
Log.i("gang", "onBind");
return null;
}
@Override
public void onCreate() {
Log.i("gang", "onCreate");
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
Log.i("gang", "onStartCommand");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
Log.i("gang", "onDestroy");
// TODO Auto-generated method stub
super.onDestroy();
}
@Override
public boolean onUnbind(Intent intent) {
Log.i("gang", "onUnbind");
// TODO Auto-generated method stub
return super.onUnbind(intent);
}
}