Google 在Android 4.4中添加了一个新的ART运行时.如何确定ART或Dalvik是否是当前的运行时?
我正在努力获得更好的理解,因此我可以在创建Android应用程序/服务时确定潜在互操作性问题的可靠性影响范围.我想弄清楚如何确定进程优先级.服务和活动之间的优先级差异以及调度程序是否以不同方式处理其优先级.基本上我正在努力深入了解一个活动或服务被来自不同应用程序(甚至是Linux内核)的流氓进程所匮乏的可能性.
有没有人有你可以推荐的任何好的链接...我的搜索还没有发现太多.
谢谢!
编辑:我关心的是处理器时间切片/调度,而不是内存资源(内存资源在android文档中有详细描述.)再次感谢!
我有一个Android应用程序,我在2013年3月17日完美地导出了签名版本.然后在2013年3月19日我更新了Facebook SDK和Android SDK Manager,然后尝试再次导出我的应用程序的签名版本.第一个错误.
现在我遇到了两个问题之一,我无法导出我的应用程序的新签名版本以重新上传Google Play商店.
我尝试了很多我在网上找到的解决方案,但仍然没有运气.我甚至删除并重新安装了Eclipse,ADT和Facebook SDK.不过,我有问题.
Eclipse实际上崩溃了,这真的很奇怪.有任何想法吗?
更新:因此,我不再在签名应用程序的导出中获得"转换为Dalvik格式失败,错误1".Eclipse只是在导出已签名的应用程序时崩溃.有任何想法吗?我有所有最新的软件:eclipse,facebook sdk,android sdk等.我正在运行最新版本的Mac OS X.
Android开发者文档,作为Project Svelte的一部分(座右铭:"你曾尝试将Bugdroid装入紧身牛仔裤吗?!?"),有一个关于管理你的应用程序内存的页面.它包含:
当用户导航到其他应用并且您的UI不再可见时,您应该释放仅由您的UI使用的所有资源.此时释放UI资源可以显着提高系统缓存进程的容量,这直接影响用户体验的质量.
和:
TRIM_MEMORY_RUNNING_LOW:您的应用程序正在运行且不被视为可用,但设备的内存运行速度要低得多,因此您应该释放未使用的资源以提高系统性能(这会直接影响应用程序的性能).
等等.
但是,如果"释放资源"实际上会以某种方式影响系统RAM,这些只会有意义.
我的印象是Dalvik VM表现得像Java VM一样(或者可能"做",如果他们在我不看的时候改变了它).AFAIK,Java VM分配系统RAM以增加堆大小但从不释放它 - 一旦分配,只要进程运行,它仍然是堆空间的一部分.
如果Dalvik VM的行为方式相同,那么我无法看到如何增加流程中未分配的堆空间量会对整体系统性能产生任何影响.现在,为我们的进程释放堆空间是一件好事,也许这样做会降低我们将来需要更多系统RAM的可能性......但这不是文档所暗示的.文档指出"此时释放UI资源可以显着提高系统缓存进程的容量"; 它没有说"此时释放UI资源没有立竿见影的效果,但将来有助于减少应用程序的系统RAM占用空间".
现在,如果指令告诉我们释放通过NDK分配的内存,那将是有意义的,因为它发生在Dalvik堆之外并且会影响系统RAM.但是文档没有得出这种区别.
除了终止进程之外,Dalvik VM是否实际将已分配的RAM释放回系统?如果是的话,何时?而且,在较小的程度上,考虑到垃圾收集器是非压缩和非复制的,它是如何完成的?
谢谢!
自Android Lollipop以来,Google已经用ART代替了DVM,因为ART比DVM更快.还有其他原因吗?
这可能听起来像一个愚蠢的问题,但谷歌并没有帮助我.
是否有针对Android的JRE?如果是这样的版本呢?是否缺少任何主要功能?
如果不是这意味着所有Java应用程序需要重新编译才能让Dalvik在Android上运行?
更新; 是否有适用于Android的JRE?
我正在尝试在Android上使用SmugFig SmugMug API.它是为我想象的J2SE而设计的,所以我不确定它是否可以在Android上运行,但我认为它值得尝试而不是试图创建我自己的API.
当我加载项目时,我收到以下错误:
Conversion to Dalvik format failed: Unable to execute dex: null
Run Code Online (Sandbox Code Playgroud)
它没有说明它失败了什么包,只是"Android包装问题",但是在我添加SmugFig并且它的依赖JARS到构建路径之前它没有这样做.
我应该在哪里看?或者这主要是因为它不适用于那些库?
我在使用-dontobfuscate标志时收到错误"转换为Dalvik格式失败,错误1".否则我的应用程序导出正常 我不想混淆,因为我使用BugSense进行错误跟踪,如果你需要对堆栈跟踪进行去混淆,他们每月收费99美元.我仍然希望获得proguard的文件大小和优化优势.
如果我评论出--dontobfuscate,每件事都很有效.除了不可读的堆栈跟踪.
我的progaurd.cfg文件:
-dontobfuscate
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, …Run Code Online (Sandbox Code Playgroud) 正如Android的文档所说,"请注意,Android测试API支持JUnit 3代码样式,但不支持JUnit 4." (测试基础).应该很清楚,JUnit 4不能与Android一起使用.
但为什么会这样呢?是因为测试是在DVM中执行的(因为Android Runtime只支持JUnit 3)?在JVM上,它本身可以选择应该使用的JUnit运行时.在DVM中这不可能吗?
我想知道是否以及如何在dalvik中动态加载dex或类文件,我写的一些quick'n'dirty测试函数是这样的:
public void testLoader() {
InputStream in;
int len;
byte[] data = new byte[2048];
try {
in = context.getAssets().open("f.dex");
len = in.read(data);
in.close();
DexFile d;
Class c = defineClass("net.webvm.FooImpl", data, 0, len);
Foo foo = (Foo)c.newInstance();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
而Foo界面就是这样
public interface Foo {
int get42();
}
Run Code Online (Sandbox Code Playgroud)
和f.dex包含该接口的一些dx'ed实现: …
android ×10
dalvik ×10
java ×5
art-runtime ×1
cgroups ×1
classloader ×1
crash ×1
eclipse ×1
junit3 ×1
junit4 ×1
obfuscation ×1
proguard ×1
scheduler ×1