相关疑难解决方法(0)

如何在Android或性能基准测试中获取对象的内存大小?

长话短说,我想测试我对该类的android.os.Bundle类的克隆实现,看看哪个更好.我已经知道我的版本可能会更糟,但我想知道有多糟糕.是否有适用于Android的基准测试工具,我可以使用它来查看哪个对象在内存中更大和/或需要更多处理时间来存储/检索值?

TL; DR:

我查看了android.os.Bundle类的源代码,我不喜欢它如何存储和返回对象.它只是将它们存储在a中HashMap<String, Object>,然后使用ClassLoader 强制转换为请求对象的类(如getString()getInt()).我觉得这个,或任何类别的演员都违反了类型安全,并在编程层面引入了歧义,这是静态打字旨在防止的,不是吗?

我想创建一个类似的数据容器类,它不违反类型安全性并且不会引入歧义.逻辑上简单但效率明显低的方法是为我想要存储的每个类创建一个Map.

我决定的是一个HashMap<String, Integer>包含我想要存储的每个类的各种列表的键索引映射的单个映射.例如,调用getString(String key)将从映射中获取与该键相关联的整数索引(如果存在),然后尝试获取关联中该索引处的对象ArrayList<String>.

这里唯一的歧义是返回null(在该类的List中不存在索引)或右类的错误对象(映射索引存在但原始对象与该键一起存储在另一个List中) ,这是程序员检查的责任.

此类的对象只是临时容器,用于以标准化方式将数据从一个地方传送到另一个地方.他们并不打算坚持下去.他们也不会以同样的方式为捆绑使用,虽然部分原因我想这样一个统一的数据容器是能够很容易地转换为Bundle,JSONObject,ContentValuesCursor和背部.

或许真正的问题是:是否真的那么糟糕,或者我只是为了避免它而采取极端努力?我想好的编程实际上是避免两种情况模糊的唯一方法.

更新:

看起来Bundle只在从包中解压缩时才使用Classloader,但它会在每次调用put()时调用unparcel().检索它时,只需转换为方法返回的类型,在try-catch块中ClassCastException.这可能是最简单的方法.

java oop android

12
推荐指数
1
解决办法
1万
查看次数

Android和java字节码操作

我是java的新手,我需要为某些目的操纵java字节码(见这个).Java字节码操作需要以下导入:

  1. org.objectweb.asm
  2. java.lang.instrument中

我通过从asm网站下载ASM包解决了org.objectweb.asm 并解决了相关的导入问题.
我不知道如何解决java.lang.instrument,我的默认ADT包没有它:

在此输入图像描述

如何解决此导入问题?我应该下载任何图书馆吗?来自哪里?
任何帮助,将不胜感激.
谢谢.

java android bytecode java-bytecode-asm

7
推荐指数
1
解决办法
2865
查看次数

标签 统计

android ×2

java ×2

bytecode ×1

java-bytecode-asm ×1

oop ×1