Beem代码分析

来源:互联网 发布:淘宝网大风筝 编辑:程序博客网 时间:2024/05/22 10:32

1 首界面Login判断是否连接,如连接直接跳转到ContactList,没有连接的话判断是否配置过,若没有配置过则进入Account.java创建新账户或者使用帐号登录

       首界面启动后 通过调用BeemApplication中的如下代码获得登录帐号

       mSettings = PreferenceManager.getDefaultSharedPreferences(this);
String login = mSettings.getString(BeemApplication.ACCOUNT_USERNAME_KEY, "");
String password = mSettings.getString(BeemApplication.ACCOUNT_PASSWORD_KEY, "");


如果使用帐号登录,则在AccountConfigure中使用如下代码保存登录信息

SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor edit = settings.edit();
edit.putString(BeemApplication.ACCOUNT_USERNAME_KEY, mAccountJID.getText().toString());
edit.putString(BeemApplication.ACCOUNT_PASSWORD_KEY, mAccountPassword.getText().toString());

2 首界面的onStart函数中执行LoginAnim实现登录,登录后进入ContactList

3 在ContactList中点击某个用户后进入Chat.java界面。实现聊天。

4 在Chat.java界面中的sendMessage()函数通过调用接口IChat中的sendMessage函数实现发送消息给其他用户

在Chat.java界面中的重载的processMessage函数实现对接收的消息的处理。

       关于接收消息,通过注册继承自IMessageListener.Stub 的OnMessageListener实现。而Stub 继承自android.os.Binder,通过重载onTransact函数通过判断消息码,若是TRANSACTION_processMessage消息则接收消息,并通过processMessage函数实现消息的处理。

      在onTransact函数中( onTransact的函数定义为Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException)   中,若是TRANSACTION_processMessage消息, 则通过如下代码实现获得消息    

     com.beem.project.beem.service.Message _arg1;

     if ((0!=data.readInt())) {
         _arg1 = com.beem.project.beem.service.Message.CREATOR.createFromParcel(data);
      }

     _arg1 就是接收到的消息。data是接收到的系统数据

      下面是Stub 中函数processMessage的说明

         /**
* This method is executed when a chat receive a message.
* @param chat the chat receiving the message.
* @param msg the message received in the chat.
*/
public void processMessage(com.beem.project.beem.service.aidl.IChat chat, com.beem.project.beem.service.Message msg) throws android.os.RemoteException


        onTransact函数是android.os.Binder的一个请求分发函数。而android的binder机制则提供了一种进程间通信的方法。


另外可参见http://www.docin.com/p-386955447.html(android内核剖析,讲解了 Binder、aidl等等),有本书叫《android内核剖析》。了解更多。

原创粉丝点击