您的位置:首页 > 移动开发 > Android开发

Service和BroadcastReceiver总结

2015-06-07 11:25 591 查看
Service
1、service的隐式启动和显示启动( 如果在同一个包中。两者都可以用。在不同包时。只能用隐式启动)
    隐式启动
        <service android:name=".service">
            <intent-filer>
                <action android:name="com.android.service"/>
            <intent-filer>
        </service>
        final Intent serviceIntent=new Intent();
        serviceIntent.setAction("com.android.service");
    显示启动
        final Intent serviceIntent=new Intent(this,service.class);
        startService(serviceIntent);
2、activity对service的调用:startService()和bindService()
     两者生命周期的区别



     1)startService()方法
      这种service可以无限地运行下去,必须调用stopSelf()方法或者其他组件调用stopService()方法来停止它。 当service被停止时,系统会销毁它。多次调用startService(),只会调用1次onCreate(),但会多次调用onStartCommand()方法。
     2)bindService()方法
        客户可以通过一个IBinder接口和service进行通信。 客户可以通过 unbindService()方法来关闭这种连接。一个service可以同时和多个客户绑定,当多个客户都解除绑定之后,系统会销毁service。
         IBinder对象相当于Service组件中的内部钩子,可以访问Service内部数据,Activity通过IBinder类和Service通信。在实际开发中,通常在Service中定义一个Binder的子类。
         bindService(Intent service, ServiceConnection conn, int flags),启动Service。ServiceConnection类,用于监听访问者和Service之间的链接情况。当activity和service链接成功后回调ServiceConnection对象的onServiceConnected方法,可在该方法中获取IBinder对象。
        多次调用 bindService(),只会调用1次onCreate()和onBind()方法。
3)IntentService的使用
      Service不是一条新线程,不应该在其中处理耗时任务。Service不会启动一个单独的线程,它与所在应用处于同一个进程中。
     intentservice是Service的子类,只需要实现onHandleIntent()方法

BroadcastReceiver
BroadcastReceiver是一个系统级的全局监听器,能够实现不同组件之间的通信。在实现BroadcastReceiver时,主要实现其中的onReceiver()方法,但是不能执行耗时操作。
1、使用步奏
       1)注册BroadcastReceiver,代码注册或者xml注册
       2)创建Intent,用于启动BroadCastReceiver
       3)调用指定BroadcastReceiver:Context的sendBroadcast()或者sendOrderedBroadcast
2、注册
      1)代码注册(适合将BroadcastReceiver作为内部类使用)
         IntentFilter filter=new IntentFilter("android.provider.xxx");//intent过滤器
         MyReceiver receiver=new MyReveiver();//Receiver对象
         registerReceiver(receiver,filter);//注册//unregisterReceiver(receiver);//取消注册
      2)AndroidManifest.xml注册(适合将BroadcastReceiver单独的类)
       <intent-filter>

                <action android:name="com.simware.BroadcastReceiverDemo" >

                </action>

      </intent-filter>  
3、普通广播和有序广播
     1)普通广播(Normal Broadcast):系统异步发送广播,同一时刻可以被所有接受者受到,效率高,但接受者不能将处理结果传递给下一个接受者。通过Context的sendBroadcast()发送普通广播
     2)有序广播(Ordered Broadcast):接受者将按照实现规定的优先级依次接收Broadcast。接收者可以终止Broadcast Intent的传播,低优先级的接收者将不会受到广播。同时接受者可以将数据传递给下一个接受者:setResultExtras(Bundle)来存放数据和getResultExtras(true)来接收上级广播的数据;通过Context的sendOrderedBroadcast()发送普通广播
       <intent-filter android:priority="20">
                <action android:name="com.simware.BroadcastReceiverDemo" >
                </action>
      </intent-filter>  

Service和Activity的通信方式
1、bindService()启动service,通过内部钩子IBinder对象实现两者的沟通
2、startService()启动service,借助BroadcastReceiver来实现数据通信,此时最好将Receiver定义为Activity的内部类,这样Receiver可以直接操控activity的数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息