我想在Android上的应用程序中直接针对正在运行的Dalvik VM实例执行操作码.我正在寻找类似于C asm功能的东西.我有dalvik的操作码列表,但是我不熟悉如何直接执行它们,或者将它们写出到.class文件,并在运行的应用程序中针对dalvikvm等某种VM CLI命令执行它们.
我正在Android上开发一个应用程序.它是一个长期运行的应用程序,可持续处理传感器数据 在运行应用程序时,我在logcat中看到了很多GC消息; 大约一秒钟.
这很可能是因为正在创建对象并在循环中立即取消引用.
如何找到立即创建和发布的对象?
我尝试过的所有java堆分析工具(*)都对堆上对象的数量和大小感到困扰.虽然它们很有用,但我更感兴趣的是找到创建临时短寿命对象的网站.
(*)我想jcat和Eclipse MAT.我无法开始hat使用Android堆转储; 它抱怨不支持的转储文件版本.
当我在手机上启动应用程序时,我从日志中收到以下错误:
E/dalvikvm( 2052): No free temp registers
E/dalvikvm( 2052): Jit: aborting trace compilation, reverting to interpreter
E/dalvikvm( 2052): No free temp registers
E/dalvikvm( 2052): Jit: aborting trace compilation, reverting to interpreter
Run Code Online (Sandbox Code Playgroud)
发生了什么 ?
我有以下代码
float square(float val) { return val*val;}
boolean isInCircle(final float x,final float y) {
float squareDistance = square(cx - x) + square(cy - y);
return squareDistance < square(RADIUS);
}
Run Code Online (Sandbox Code Playgroud)
这里RADIUS是一个static final float.
java编译器会优化调用square(RADIUS)吗?
转换为dalvik代码时会发生什么android?它会保持优化吗?
我有一个由另一家公司制作的pp,以便对它进行一些更新,但我无法理解.我已经在这个问题上挣扎了将近10个小时并且已经经历了很多线程,建议不同的解决方案来解决这个错误,但没有运气.
我试图以不同的方式清理,重建和更改我的清单文件,但没有成功.但我仍然认为问题可能在清单文件中,但不确定.
12-11 09:47:47.687: E/AndroidRuntime(9756): FATAL EXCEPTION: main
12-11 09:47:47.687: E/AndroidRuntime(9756): java.lang.RuntimeException: Unable to instantiate application com.visma.falck.android.assistance.FalckAssistanceApplication: java.lang.ClassNotFoundException: com.visma.falck.android.assistance.FalckAssistanceApplication in loader dalvik.system.PathClassLoader[/data/app/com.visma.falck.android.assistance-1.apk]
12-11 09:47:47.687: E/AndroidRuntime(9756): at android.app.LoadedApk.makeApplication(LoadedApk.java:490)
12-11 09:47:47.687: E/AndroidRuntime(9756): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3901)
12-11 09:47:47.687: E/AndroidRuntime(9756): at android.app.ActivityThread.access$2200(ActivityThread.java:135)
12-11 09:47:47.687: E/AndroidRuntime(9756): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1098)
12-11 09:47:47.687: E/AndroidRuntime(9756): at android.os.Handler.dispatchMessage(Handler.java:99)
12-11 09:47:47.687: E/AndroidRuntime(9756): at android.os.Looper.loop(Looper.java:150)
12-11 09:47:47.687: E/AndroidRuntime(9756): at android.app.ActivityThread.main(ActivityThread.java:4385)
12-11 09:47:47.687: E/AndroidRuntime(9756): at java.lang.reflect.Method.invokeNative(Native Method)
12-11 09:47:47.687: E/AndroidRuntime(9756): at java.lang.reflect.Method.invoke(Method.java:507)
12-11 09:47:47.687: E/AndroidRuntime(9756): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
12-11 09:47:47.687: E/AndroidRuntime(9756): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
12-11 09:47:47.687: …Run Code Online (Sandbox Code Playgroud) 我正在开发一款关于android的游戏,"Space RPG" - 目前只在大多数Galaxy S4和HTC Ones上看到这个错误.这都是Java.
游戏将停止,当我尝试调试进程并暂停有问题的线程时,它将不会挂起,并且会发生旋转挂起错误.线程转储让我看到它在一个特定的while循环中,它正在采取所需的"结束位置"并在不断增加的距离步骤向后迭代以找到"起始位置".
这是事情变得烦人的地方.我可以验证循环无法无限运行,即使条件是while(true),在我的break被调用之前它不可能运行超过200次迭代(这个断言由正在运行的代码备份)我试过的每一部电话).
为了帮助我缓解这个问题,我在循环中添加了一个简单的递增变量,如果它超过1000,它会记录一些东西,所以我可以看到DID运行太多次,以防万一设置了一些变量严重或某事. 当此计数器代码存在时,不会发生崩溃/挂起.我也没有看到任何日志表明它跑了1000多次.
如果我删除此计数器,则每次播放5-10秒后都会发生挂起[其中while循环可能会运行10次,尽管有所不同].
因此,我的问题是,到底发生了什么?:P为什么这些较新的手机(但似乎没有旧款手机)在执行有效工作的循环中存在问题,并且在没有增量变量的情况下不会持续很长时间.线程如何可能在该循环中停止,以及如何使用额外的计数器变量来解决问题?这项工作是在opengl渲染线程上完成的,如果这很重要的话.
我有关于大多数S4发生这种情况的报告,但至少有一个S4在那里没有发生.我今天使用的那个正在发生.这让我想知道它是否可能与特定的android,java,dalvik或手机上的其他东西有关,但遗憾的是我没有从S4工作的任何细节.
非常感谢任何有关此类内容的帮助,指导,想法或进一步阅读.
float vel = 1.0f; // final velocity is 1. We are working backwards to find out what the starting velocity will need to be.
int i = 0;
double xmath = Math.sin(rot* (Math.PI/180.0f)); // component of velocity for x,y direction based on rotation
double ymath = Math.cos(rot* (Math.PI/180.0f));
while (true) {
/* with this section uncommented, the stall never happens...
++i;
if (i>1000) {
// Something …Run Code Online (Sandbox Code Playgroud) 我在最近3个小时内遇到了这个错误.当我从SVN检查出最新的代码之后,它突然停止工作了.
注意:
我的新项目大小约为135 MB,我使用的是eclipse kepler.
myApp/res/libs中还有3个jars,名为sqlite.jar,ksoap2.jar,rt.jar
所以我用Google搜索并找到了这个答案.还有Blog 1和Blog 2我编辑了eclipse.ini
从:
-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20140116-2212
-product
org.eclipse.epp.package.standard.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Xms40m
-Xmx512m
Run Code Online (Sandbox Code Playgroud)
至
-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20140116-2212
-product
org.eclipse.epp.package.standard.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
1024M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
1024m
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Xms512m
-Xmx1024m
Run Code Online (Sandbox Code Playgroud)
但它仍然没有工作,并在日食中得到相同的错误.任何帮助,将不胜感激.
我的应用程序有 100% 用 Java 编写的代码,它不需要进行任何繁重的操作。
应用程序本身仅使用下一个库,但它们都没有 JNI 代码:
今天我收到一个奇怪的崩溃报告,它没有显示任何正常的异常信息。
该报告是通过装有 Android 4.4 的“Galaxy S5 (klte)”设备发送的。
这是崩溃报告的标题:
Native crash at /dev/ashmem/dalvik-jit-code-cache in
/dev/ashmem/dalvik-jit-code-cache (deleted)
Run Code Online (Sandbox Code Playgroud)
这是崩溃内容:
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'samsung/kltexx/klte:4.4.2/KOT49H/G900FXXU1ANE2:user/release-keys'
Revision: '14'
pid: 11904, tid: 11904, name: .lb.app_manager >>> com.lb.app_manager <<<
signal 7 (SIGBUS), code 2 (BUS_ADRERR), fault addr 6d7b97cc SOME_NUMBERS
backtrace:
#00 pc 00026a56 /dev/ashmem/dalvik-jit-code-cache (deleted)
#01 pc 00026a55 /dev/ashmem/dalvik-jit-code-cache (deleted) …Run Code Online (Sandbox Code Playgroud) 我有一些android测试,当在4.4/Kitkat下的Android版本上运行时会崩溃.
这些是我在build.gradle中的库
androidTestCompile 'org.mockito:mockito-core:1.9.5'
androidTestCompile 'com.google.dexmaker:dexmaker:1.1'
androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.1'
Run Code Online (Sandbox Code Playgroud)
虽然我需要添加一些提示来告诉Dexmaker将缓存放在哪里,但测试运行与Android 4.4版本一样正常.
System.setProperty("dexmaker.dexcache", getInstrumentation().getContext().getCacheDir().getPath());
Run Code Online (Sandbox Code Playgroud)
以下是设备的logcat输出:
D/dalvikvm( 1712): GC_FOR_ALLOC freed 479K, 19% free 2532K/3124K, paused 3ms, total 3ms D/dalvikvm( 1712): GC_CONCURRENT freed 427K, 18% free 2595K/3136K, paused 1ms+0ms, total 3ms D/dalvikvm( 1712): GC_CONCURRENT freed 311K, 16% free 2686K/3188K, paused 3ms+0ms, total 4ms D/dalvikvm( 1712): GC_FOR_ALLOC freed 127K, 11% free 2852K/3188K, paused 1ms, total 1ms D/dalvikvm( 1712): GC_FOR_ALLOC freed 123K, 7% free 3239K/3476K, paused 4ms, total 4ms D/dalvikvm( 1712): GC_CONCURRENT freed 53K, 6% free …
实现我的LoginActivity.java,我设置了另一个class名为的文件+ AuthClient,它大量使用了 Volley。UserLoginTask需要Boolean从它返回 adoInBackground以便远程调用登录成功/失败。
那么下面我可以用 volley 做一个同步请求吗?,我设置:
void login(final HashMap<String, String> data,
Response.Listener<JSONObject> listener,
Response.ErrorListener errorListener) {
JsonObjectRequest req = new JsonObjectRequest(
api_prefix + "/auth", new JSONObject(data), listener, errorListener
);
queue.add(req); // RequestQueue
}
boolean loginResponseHandler(RequestFuture<VolleyError> err_future,
RequestFuture<JSONObject> future) {
try {
VolleyError err_response = err_future.get();
JSONObject response = future.get();
System.out.println("response.toString() = " + response.toString());
return true;
} catch (InterruptedException | ExecutionException e) {
System.err.println("e = " …Run Code Online (Sandbox Code Playgroud)