




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 1 通过 dumpsys meminfo 命令查看一个进程的内存情况 1 通过 dos 链接手机 命令如下 前提手机需要 root 2 输入命令 adb shell dumpsys meminfo com winorout travelclient activity 3 运行结果如下 2 Serialiazble 和 Parcelable 的用法 1 总体描述总体描述 在 Android 开发过程中 经常要在 Activity 之间传递参数 使用 Android 系统提供的方法可以传递基本数据类型的变量 但有时候我们经常要传递一些复杂的数据类型或自定义的类复杂的数据类型或自定义的类 这种情况的参数无法直接传递 我们可以通过序列化序列化实现 为什么要将对象序列化 为什么要将对象序列化 1 永久性保存对象 保存对象的字节序列到本地文件中 2 用过序列化对象在网络中传递对象 3 通过序列化对象在进程间传递对象 常用到常用到 serialiableserialiable 和和 parcelableparcelable 接口接口 区别 区别 Serializable 的作用是为了保存对象的属性到本地文件 数据库 网络流 rmi 以方便数据传输 当然这种传输可以是 程序内的也可以是两个程序间的 Android 的 Parcelable 的设计初衷是因为 Serializable 效率过慢 为了在程序内不同组件间以及不同 Android 程序间 AIDL 高效的传输数据而设计 这些数据仅在内存中存在 Parcelable 是通过 IBinder 通信的消息的载体 Parcelable 的性能比 Serializable 好 在内存开销方面 较小 所以在内存间数据传输时推荐使用 Parcelable 如 activity 间传输数据 而 Serializable 可将数据持久化方便 保存 所以在需要保存或网络传输数据时选择 Serializable 因为 android 不同版本 Parcelable 可能不同 所以不推荐使用 Parcelable 进行数据持久化 实现 实现 对于 Serializable 类只需要实现 Serializable 接口 并提供一个序列化版本 id serialVersionUID 即可 而 Parcelable 则需要实现 writeToParcel describeContents 函 数以及静态的 CREATOR 变量 实际上就是将如何打包和解包的 工作自己来定义 而序列化的这些操作完全由底层实现 2 实现实现 Serialiable 接口接口 Serializable 的作用是将数据对象存入字节流当中 在需 要时重新生成对象 主要应用是利用外部存储设备保存对象状 态 以及通过网络传输对象等 implements Serializable 接口的作用就是给对象打了一 个标记 系统会自动将其序列化 案例案例 1 1 1 User java1 User java implements Serializable 2 MainActivity java2 MainActivity java User user new User Intent intent new Intent this Second class intent putExtra user user 3 Second java3 Second java Intent intent getIntent User user intent getSerializableExtra user 3 实现实现 Parcelable 接口接口 为什么要实现为什么要实现 ParfcelableParfcelable 接口来实现在接口来实现在 IntentIntent 中传递对中传递对 象 象 a 在使用内存的时候 Parcelable 比 Serializable 性 能高 所以推荐使用 Parcelable 类 b Serializable 在序列化的时候会产生大量的临时变 量 从而引起频繁的 GC Parcel 的序列化和反序列化的读写全是在内存中进行 所 以效率比 JAVA 序列化中使用外部存储器会高很多 注意 注意 Parcelable 不能使用在将数据存储在磁盘上的情况 因为不能使用在将数据存储在磁盘上的情况 因为 Parcelable 不能很好不能很好 的保存数据的持续性在外界有变化的情况下 因此在这种情况下 建议使用的保存数据的持续性在外界有变化的情况下 因此在这种情况下 建议使用 Serializable 案例 案例 步骤步骤 1 1 自定义实体类 实现自定义实体类 实现 ParcelableParcelable 接口 重写其两个方法 接口 重写其两个方法 步骤步骤 2 2 该实体类必须添加一个常量 该实体类必须添加一个常量 CREATORCREATOR 名字大小写都不能使其他的 该常量 名字大小写都不能使其他的 该常量 必须实现必须实现 ParcelableParcelable 的内部接口 的内部接口 Parcelable CreatorParcelable Creator 并实现该接口中的两个方法 并实现该接口中的两个方法 User javaUser java 如下 如下 1 public class User implements Parcelable 2 public String name 3 public int age 4 必须要创建一个名叫 CREATOR 的常量 用来创建自定义的 Parcelable 的对象 5 public static final Parcelable Creator CREATOR new Parcelable C reator 6 Override 7 public User createFromParcel Parcel source 8 return new User source 9 10 重写 createFromParcel 方法 创建并返回一个获得了数据的 user 对象 11 Override 12 public User newArray int size 13 return new User size 14 15 16 17 Override 18 public String toString 19 return name age 20 21 22 无参数构造器方法 供外界创建类的实例时调用 23 public User 24 25 26 带参构造器方法私用化 本构造器仅供类的方法 createFromParcel 调用 27 读数据进行恢复 28 private User Parcel source 29 name source readString 30 age source readInt 31 32 33 Override 34 public int describeContents 35 return 0 36 37 38 39 将对象中的属性保存至目标对象 dest 中 写数据进行保存 40 Override 41 public void writeToParcel Parcel dest int flags 42 dest writeString name 43 dest writeInt age 44 45 46 省略 getter setter 其他代码 其他代码 1 Bundle bundle new Bundle 2 bundle putParcelable user user 3 Intent intent new Intent MainActivity this SecondActivity class 4 intent putExtras bundle 1 Intent intent getIntent 2 Bundle bun intent getExtras 3 User user bun getParcelable user 4 System out println user Serializable 序列化不保存静态变量 可以使用 TransientTransient 关键字对部分字段不进行序列化 也可以覆盖 writeObject readObject 方法以实现序列化过程自定义 三 三 关于 android 的一个常见错误 Unable to add window token is not valid Process com android Flags 0 x9be65 Package com android v15 4 0 4 Build 4 0 4 IMM76D 1348165925 eng test keys android view WindowManager BadTokenException Unable to add w indow token android os BinderProxy 41791b20 is not valid is your activity running at android view ViewRootImpl setView ViewRootImpl java 546 at android view WindowManagerImpl addView WindowManagerImpl j ava 302 at android view WindowManagerImpl addView WindowManagerImpl j ava 216 at android view WindowManagerImpl CompatModeWrapper addVie w WindowManagerImpl java 141 at android view Window LocalWindowManager addView Window jav a 537 at android app Dialog show Dialog java 278 at android app AlertDialog Builder show AlertDialog java 991 at android widget TextView onTouchEvent TextView java 8430 at android view View dispatchTouchEvent View java 5553 at android view ViewGroup dispatchTransformedTouchEvent ViewGr oup java 2027 at android view ViewGroup dispatchTransformedTouchEvent ViewGr oup java 2027 at android view ViewGroup dispatchTouchEvent ViewGroup java 176 2 at com android internal policy impl PhoneWindow DecorView superD ispatchTouchEvent PhoneWindow java 1953 at com android internal policy impl PhoneWindow superDispatchTouc hEvent PhoneWindow java 1397 at android app Activity dispatchTouchEvent Activity java 2431 at com android internal policy impl PhoneWindow DecorView dispatc hTouchEvent PhoneWindow java 1901 at android view View dispatchPointerEvent View java 5733 at android view ViewRootImpl deliverPointerEvent ViewRootImpl java 3 112 at android view ViewRootImpl handleMessage ViewRootImpl java 26 66 at android view ViewRootImpl processInputEvents ViewRootImpl jav a 900 at android view ViewRootImpl handleMessage ViewRootImpl java 26 75 at android os Handler dispatchMessage Handler java 99 at android os Looper loop Looper java 154 at android app ActivityThread main ActivityThread java 4651 at java lang reflect Method invokeNative Native Method at java lang reflect Method invoke Method java 511 at com android internal os ZygoteInit MethodAndArgsCaller run Zyg oteInit java 809 at com android internal os ZygoteInit main ZygoteInit java 576 at dalvik system NativeStart main Native Method 1 错误分析 从错误信息我们也可以明白其原因 此问题根本原因就是由于将要弹 出的 dialog 所要依附的 View 已经不存在导致的 2 什么地方可能照成此问题 当界面销毁后再弹出来 或者界面跳转 时我们的 view 发生改变 dialog 依附的 context 发生变化或者界面未 运行了 此外 很多时候我们需要通过一个非组件类来调用一个 view 类的方法 来弹出 dialog 或 Toast 这样就需要再提供一个静态 context 来创建这 个 dialog 或者 Toast 例如我们在一个 view 中通过一个静态类来弹出一个对话框 AlertDialog Builder builder new AlertDialog Builder mContextNew 当然并不是所有静态 context 都是可以用来创建 dialog 的 例如 App getApplication getApplicationContext 这个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 沟槽开挖安全施工方案试卷教案(2025-2026学年)
- 人工智能在轧空交易决策支持系统的开发-洞察及研究
- 智能工厂网络安全风险防范措施
- 股票技术分析入门与经典K线策略
- 网络安全基础知识的题库及答案解析
- GBT50430质量管理体系指南解读
- 公共场所消防安全巡检方案
- 智能制造车间网络安全防护方案
- 医院急诊科流程优化方案报告
- 园林植物病虫害防治指导手册
- 影视鉴赏-第一章-影视鉴赏的基本概念
- 电厂安全生产运行管理培训课件
- 医院院前急救病历 广州市急救中心
- 诊断学胸壁胸廓与乳房
- 输液室运用PDCA降低静脉输液患者外渗的发生率品管圈(QCC)活动成果
- 集约化猪场的规划设计
- 数星星的孩子习题精选及答案
- 摩登情书原著全文下载(通用3篇)
- 材料科学基础复习题及答案
- 抗栓治疗消化道损伤防治策略
- 螺旋千斤顶设计大作业
评论
0/150
提交评论