Android中进程process间通信的实现方式

来源:互联网 发布:合肥java工资待遇 编辑:程序博客网 时间:2024/06/05 19:10

1. Intent; 

2. Binder(AIDL); 

3. Message; 

4. BroadcastReceiver.

Demo

1. Intent:

AndroidManifest.xml

activity_main.xml

activity_01.xml

activity_share.xml

intentdemo\src\main\java\com\xyy\intentdemo

MainActivity.java

Activity01.java

ShareActivity.java

======================================================

 2.Binder:

binder机制是一种IPC机制,进程间通讯的一种工具

Java层可以利用AIDL工具来实现相应的接口生成通讯代码


service服务在后台运行

 service注册: <serviceandroid:name="com.startservice.MyService"></service>

启动服务service 两种方式:

   一 startservice

     启动该服务的Activity挂了,服务不会挂,大难临头各自飞;不能拿到service的实例

    Service:

              //绑定时候的回调方法

              @Override

              publicIBinder onBind(Intentintent) {

                     returnnull;

              }

 

              //最后调用的方法

              @Override

              publicvoid onDestroy() {

                     super.onDestroy();

                    Log.d("TAG","StartService onDestroy");

              }

 

              //服务启动之后的回调

              @Override

              @Deprecated

              publicvoid onStart(Intent intent,int startId) {

                    super.onStart(intent,startId);

                    Log.d("TAG","StartService onStart");

              }

 

              //最先调用的方法

              @Override

              publicvoid onCreate() {

                     super.onCreate();

                    Log.d("TAG","StartService onCreate");

              }

      //=========================

     Activity.java:

         Intent mIntent = new Intent();

         mIntent.setClass(getApplicationContext(), MyService.class);

         bindService(mIntent, mConnection, Context.BIND_AUTO_CREATE);

 

     二绑定服务

       可以拿到服务的实例,引用。启动该服务的Activity挂了,服务也会挂了。

       1 IBinder  -- 类似王婆

            IBinder是远程对象的基本接口,

              是为高性能而设计的轻量级远程调用机制的核心部分。

              但它不仅用于远程调用,也用于进程内调用。

            这个接口定义了与远程对象交互的协议。

            不要直接实现这个接口,而应该从Binder派生。

 

      2绑定服务

        Service:

              classMyBinder extends Binder{

                     //通过getStartService拿到本服务的引用

                    StartServicegetStartService(){

                            //把本服务传递出去了

                           returnStartService.this;

                     }

              }

 

              //绑定时候的回调方法

              @Override

              publicIBinder onBind(Intentintent) {

                    Log.d("TAG","StartService onBind");

                     //MyBinder--方法 getgetStartService 可以获取到本服务

                     //获取本服务实例的步骤

                     //1拿到MyBinder 2 调用 getStartService

                     returnnew MyBinder();

              }    

 

      Activity:

                 ServiceConnection mConnection= newServiceConnection() {

                     //断开服务连接的回调方法

                     @Override

                     publicvoidonServiceDisconnected(ComponentName name) {

                   

                     }

                     //服务连接的回调方法 --- 在此方法中,拿到服务的引用

                     @Override

                     publicvoidonServiceConnected(ComponentName name, IBinder service) {

                            //拿到王婆

                            MyBinderm =((MyBinder)service);

                            //通过王婆,拿到潘XX

                            mService=m.getStartService();

                            mService.playMusic("听");

                     }   

              }

      Service :

                //绑定

            Intent mIntent = new Intent();

             mIntent.setClass(getApplicationContext(),StartService.class);

              //绑定的时候自动创建

               bindService(mIntent,mConnection,Context.BIND_AUTO_CREATE);

              //拿到服务的实例可以执行服务的方法

-------------------------------------------------------------------------------

Client 端videoDemo

AndroidManifest.xml

res\layout

activity_main.xml

VideoService.java

MainActivity.java

==========================================

3. Message:

MainActivity.java

TCPThread

res\layout

activity_main.xml

Talkitem

talkTCPhandlerClient\res\drawable-hdpi

.9.patch pic

talkTCPhandlerServer\src\com\demo

ServerThread

Demo.java

==========================================

4. BroadcastReceiver:

DemoNotificationBroadcastMusic

AndroidManifest.xml

Local music no need manifest

-----------------------------------------------------------------------

notificationlayout.xml

MainActivity.java


0 0
原创粉丝点击