Android四大组件之Service的两种使用情况

来源:互联网 发布:linux系统的rpm包什么 编辑:程序博客网 时间:2024/05/21 08:40

最近车载项目中的车辆信息App中两个情况一个实时的车况数据/以及今日车况统计数据(下面附图)

一开始对于实时界面的有两个选项用BroadCast或者Service,but 同一个界面有好多实时数据需要显示,显然用广播就不怎么合适了;

ok,最后我选择两个界面都和服务关联起来

我们都知道Service有两种方式:bindService  and  startService

两者不同:bindService需要与Activity绑定,生命周期与Activity一样,(同生共死)

                   startService一般都是app界面是否可见都可以活,这也是App可以后台一原因,(怎么也不死,除非关机),在项目中,在开机后就开启这个服务,(即接收到开机广播就开启服务)

至于怎么用就不怎么赘述了,直接交上关键代码

//开机即开启服务1、 @Override    public void onReceive(Context context, Intent intent) {        String action = intent.getAction();        Log.d(TAG, "action:  ====" + action);        if (action.equals("android.intent.action.BOOT_COMPLETED")) {            mCanBusManager = new CANBusManager(context);            Log.d(TAG, "广播开机");            Intent vehicleInfoService = new Intent(context, MyService.class);            context.startService(vehicleInfoService);            Log.d(TAG, "车辆信息服务已成功开启");2、在MyService这个类onCreat()中 @Override    public void onCreate() {        Log.d(TAG, "MyService::::onCreate: ");        super.onCreate();       /* BootCompletedReceiver receiver = new BootCompletedReceiver();        registerReceiver(receiver, new IntentFilter(Intent.ACTION_TIME_TICK));        Log.d(TAG, "MyService: 服务初始化");*///这里就是你要用Service监听的地方        mVehicleInfo = new VehicleinfoActivity();        mVehicleDataManager = new VehicleInfoManger(getApplication());        mVehicleDataManager.init();    }3、防止SerVice死掉(有点多余)@Override    public void onDestroy() {        super.onDestroy();        Log.d(TAG, "onDestroy:MyService 服务销毁");        Intent intent = new Intent();        intent.setClass(this, MyService.class);        startService(intent);    }4、//此方法是为了可以在Acitity中获得服务的实例(VehicleinfoActivity)    public class MyServiceBinder extends Binder {        public MyServiceBinder getService() {            return MyServiceBinder.this;        }    }5、在 VehicleinfoActivity 关键的一步 private ServiceConnection CanBusConnection = new ServiceConnection(){        @Override        public void onServiceConnected(ComponentName name, IBinder service) {            myService = ((MyService.MyServiceBinder) service).getService();/*            mVehicleDataManager = new VehicleInfoManger(getApplication(),VehicleinfoActivity.this);            mVehicleDataManager.init();*/            Log.d(TAG, "onServiceConnected: 走了");        }        @Override        public void onServiceDisconnected(ComponentName name) {        }    };以上为StartService使用关键代码以下为BindService使用关键代码  private ServiceConnection CanBusConnection = new ServiceConnection() {        @Override        public void onServiceConnected(ComponentName name, IBinder service) {            mRealDataManager = new RealDataManger(getActivity(), RealTimeFragment.this);            mRealDataManager.init();            Log.d(TAG, "onServiceConnected: 走了");        }        @Override        public void onServiceDisconnected(ComponentName name) {        }    };


原创粉丝点击