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.傅:学习笔记
欢迎转载,转载注明出处,谢谢