如何以编程方式找到我的Android应用程序上使用的内存?
我希望有办法做到这一点.另外,我如何获得手机的免费记忆?
如何以编程方式检测Android应用程序可用的应用程序堆大小?
我听说有一个功能可以在SDK的更高版本中执行此操作.无论如何,我正在寻找适合1.5及以上的解决方案.
[ 以下是应用程序在哪些约束条件下应该做的描述 ]
我想要一个数据结构,搜索string一个250,000字列表中是否存在,同时只使用相当数量的ram并保持将这个数据结构加载到ram small所需的时间(比如说0-8秒).找到一个单词所需的时间也应该很快(比方说0到0.5秒),但ram的使用更为重要.它也应该可以创建多个游戏(更多关于这个游戏的标题是"使用"),而不需要更多的内存.
知道哪些单词以a开头string,但不足以牺牲加载时间达数秒也是非常有价值的.
它适用于Android离线游戏.有限的ram可用.应用程序根据此帖子可以使用的最大ram数量在16-32mb ram之间,具体取决于设备.我的空Android应用程序已经使用了大约17mb(在Android Studio中使用Memory Monitor).我的android设备将ram的使用量限制在26mb,让我的整个空间大约为8mb Activity.
他们似乎都注定了不同的方式.
Hashmap - 将所有单词读入哈希映射对象.
1.1 初始化速度:用23秒慢速将每个单词读入哈希映射.
1.2 ram用法:使用大量的ram,虽然我忘记了多少.
1.3 搜索速度:查找列表中是否存在单词的速度当然很快.
1.4 缩小可能的单词(可选):慢,需要经过整个哈希映射并逐个删除它们.此外,由于它使用删除,因此无法使用相同的哈希映射实例来播放多个游戏.添加更多游戏时会占用太多内存,因此无法缩小可能的单词.
特里 -实现一个RadixTree& 你可以在这里看到我的实现.
2.1 初始化速度:用47秒慢速读取每个单词进入RadixTree.
2.2 ram使用:使用大量的ram,以至于Android几次挂起线程.
2.3 搜索速度:查找列表中是否存在单词是否快速.
2.4 缩小可能的单词(可选):超快,因为只需要对树中的节点进行引用,然后找到所有可能的单词作为其子节点.您可以通过缩小可能的单词来玩很多游戏,因为额外的游戏只需要参考树中的节点!
扫描仪 - 按顺序浏览文字文件
3.1 初始化速度:无.
3.2 ram用法:无.
3.3 搜索速度:约20秒.
3.4 缩小可能的单词(可选):不能现实地完成.
简单代码:
String word;
String wordToFind = "example";
boolean foundWord = false;
while …Run Code Online (Sandbox Code Playgroud) 我看到这篇帖子说,当strings.xml应用程序太大时应用程序可能崩溃.我的strings.xml文件现在是700行,它会在很长一段时间内变大.
帖子中的答案说使用SQLite数据库可以防止这种情况.
但在我的情况下,我有一个SQLite数据库,可以获取条目的数据,strings.xml因为我的应用程序使用不同语言的区域设置.
我的问题是,有多大strings.xml?如果我达到线路限制,我该怎么做才能防止崩溃?
我试图在两个活动之间传递自定义对象的数组列表抛出意图,但我得到了这个错误,我不知道如何解决它.如果有人能帮助我,我将不胜感激!提前致谢.
传递第1个活动的方法:
i.putParcelableArrayListExtra("key", (ArrayList<? extends Parcelable>) result);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)
进入第2个活动的方法:
Intent i = getIntent();
ArrayList<ItemObjects> list = i.getParcelableArrayListExtra("key");
Run Code Online (Sandbox Code Playgroud)
错误日志:
12-25 09:11:49.546 17742-17742/com.example.baha.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.baha.myapplication, PID: 17742
java.lang.RuntimeException: Failure from system
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1514)
at android.app.Activity.startActivityForResult(Activity.java:3917)
at android.app.Activity.startActivityForResult(Activity.java:3877)
at android.app.Activity.startActivity(Activity.java:4200)
at android.app.Activity.startActivity(Activity.java:4168)
at com.example.baha.myapplication.splash$GetMarkets.onPostExecute(splash.java:127)
at com.example.baha.myapplication.splash$GetMarkets.onPostExecute(splash.java:62)
at android.os.AsyncTask.finish(AsyncTask.java:651)
at android.os.AsyncTask.-wrap1(AsyncTask.java)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: android.os.TransactionTooLargeException: data parcel size 12404332 bytes
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(Binder.java:503)
at …Run Code Online (Sandbox Code Playgroud)