Android学习之——杂项

a. new可以调用带参数的构造函数,newInstance不可以 
b. newInstance: 弱类型。低效率。只能调用无参构造。

    new: 强类型。相对高效。能调用任何public构造。

c. new是自己下厨,做饭自己吃。newInstance是外面吃别人做给你吃。

        自己做可以保证安全,而且可以有多个口味,什么酱,放多少自己定。new对象不会因为找不到类而出异常,而且你还可以调用多个构造函数,按照自己口味去new对象,去做一份符合自己口味的。

        在外面吃,可能会你点的菜那个店里没有,或者是口味不对,你要吃番茄酱,但是人家只有花生酱。而且菜没洗干净你也不知道。newInstance也是如此,很可能你要的对象他不存在,或者是参数不对。

对象的串行化(Serialization)
 什么是串行化:
把对象的这种能记录自己的状态以便将来再生的能力,叫做对象的持续性(persistence)。
对象通过写出描述自己状态的数值来记录自己,这个过程叫对象的串行化(Serialization)。
串行化的任务:写出对象实例变量的数值。

SoapObject.getProperty的作用:
// 生成调用Webservice方法的SOAP请求信息.该信息由SoapSerializationEnvelope对象描述
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
        SoapEnvelope.VER11);
envelope.bodyOut = rpc;
envelope.dotNet = true;
envelope.setOutputSoapObject(rpc);
 
ht.call(NAMESPACE + methodName, envelope);
if (envelope.bodyIn.toString().startsWith("SoapFault")) {
    SoapFault sf = (SoapFault) (envelope.bodyIn);
    Log.i("fault", sf.faultstring);
    if (handler != null) {
        Message message = Message.obtain(handler);
        message.what = 3;
        message.obj = sf.faultstring;
        message.sendToTarget();
    }
    return;
}
SoapObject result = (SoapObject)envelope.bodyIn;
String str = result.getProperty("abc").toString();//从result里面找到名为"abc"的值  如:result的值为:getInfoResponse{abc=测试; } 那么,result.getProperty("abc")将会从result里面找到abc的值“测试”
Android 的Message机制:
Message机制涉及三个主要的类:Handler、 Message、 Looper
1. Handler 两个用途:定时处理或者分发消息;添加一个执行的行为在其他线程中执行。
Handler中常见的方法就是对消息的处理,可以覆盖public void handleMessage(Message msg) 方法,

2. 消息android.os.Message 
定义一个Message包含必要的描述和属性数据,此对象可以被发送给android.os.Handler处理。
字段:what保存消息标示;obj是Object类型对象;replyTo是消息管理器,会关联到一个handler,handler就是处理其中的消息。通常Message对象不是new出来的,而是调用handler中的obtainMessage方法来直接获得Message对象
如:
Message message = Message.obtain(handler);
3. Looper类主要用于一个线程循环获取消息队列中的消息:管理消息队列,负责消息的出列和入列操作。
Message机制原理示意图:

Activity   <--------------->  EHandler<----->  Looper<----->  MessageQueue     

IntentReceiver <----->  EHandler <----->  Looper<----->  MessageQueue    


具体详细传递步骤等可以参考 http://blog.csdn.net/dadoneo/article/details/7667726 文章 


WeakReference
WeakReference与SoftReference都可以用来保存对象的实例引用,与垃圾回收有关。
WeakReference是弱引用,保存的对象实例可被GC回收,常用于 在某处保存对象引用,而又不干扰该对象被GC回收 如Debug,内存监视工具等程序中。该类程序一般要求既要观察到对象,又不能影响该对象正常的GC过程。
SoftReference是强引用,保存对象实例,除非JVM即将OutOfMemory,否则不会被GC回收。特别适用于设计对象Cache。对于Cache,我们希望被缓存的对象最好始终常驻内存,但是如果JVM内存吃紧,为了不发生OutOfMemoryError导致系统崩溃,必要的时候也允许JVM回收Cache的内存。待合适的时机再把数据重新Load到Cache中。使得设计更具有弹性。

Dialog点击按钮时对话框不会被关闭的实现:
public void closeDialog(final DialogInterface dialog, boolean close) {
    // 利用反射使点击按钮时,对话框不会关闭
    try {
        // 得到AlertDialog的父类属性mShowing
        field = dialog.getClass().getSuperclass()
                .getDeclaredField("mShowing");
        field.setAccessible(true);
        // 将mShowing变量设为false,表示对话框已关闭
        field.set(dialog, close);
        dialog.dismiss();
    } catch (NoSuchFieldException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
详细的反射可以参照这篇文章
android 反射机制的原理与实现 http://blog.csdn.net/annaleeya/article/details/8240510



Mr.傅:学习笔记
欢迎转载,转载注明出处,谢谢

Android学习之——杂项,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。