如何在原生JNI代码中访问Android KitKat/Lollipop中的DocumentFile生成的文件,因此我可以使用fopen,fread等.我特别要求它通过NDK访问外部SD卡文件.
我的android应用程序处理非常大的Bitmaps.因此,我在图像视图中关闭了硬件加速功能.但是,有些用户已将Developer-Option的"强制GPU加速"设置为开启状态.这会导致错误"位图太大而无法上传到纹理中".如果我使用isHardwareAccelerated()检查视图,它总是返回false.
有没有办法捕获OpenGL-Error'Bitmap太大而无法上传到纹理'?
我曾经说过,使用Canvas.drawPath(path,paint)会比连续的Canvas.drawLine()慢得多,或者使用Canvas.drawLines().我无法提供准确的性能数据,但我注意到在Nexus 10上使用路径绘图非常慢(<10 FPS),而使用drawLines则更加平滑.是否有一些实现错误或者可能是一个参数来加速这种性能?截至目前,我根本不能使用drawPath(),因为性能很弱.
我目前正在用ndk实现一个android函数.我在java中声明了这个函数
public static native void calculate(float[] rgb,float factor);
Run Code Online (Sandbox Code Playgroud)
然后,我写了C函数:
JNIEXPORT void JNICALL Java_<package>_calculate(
JNIEnv * env,
jobject object,
jfloatArray rgbObject,
jfloat factor){
jfloat* rgb = (*env)->GetFloatArrayElements(env,rgbObject,0);
if(rgb==NULL) return;
rgb[0]=5; // Test, crash!
(*env)->ReleaseFloatArrayElements(env,rgb,rgbObject,0);
}
Run Code Online (Sandbox Code Playgroud)
但是,每当我尝试使用数组和某个值调用该函数时,我都会收到logcat消息:
A/libc(16064):致命信号11(SIGSEGV)位于0x00000010(代码= 1)
之后,应用程序崩溃了.我发现在写入浮点值时总会出现这种情况.阅读不会导致崩溃.
我有什么不对吗?是不是可以写出数组值?
我在应用程序中使用 RenderScript 来执行多项图像处理任务。
有时,我会随机得到以下异常:
10-10 15:27:04.479: E/AndroidRuntime(2113): FATAL EXCEPTION: FinalizerWatchdogDaemon
10-10 15:27:04.479: E/AndroidRuntime(2113): java.util.concurrent.TimeoutException: android.renderscript.Type.finalize() timed out after 10 seconds
10-10 15:27:04.479: E/AndroidRuntime(2113): at android.renderscript.RenderScript.nObjDestroy(RenderScript.java:216)
10-10 15:27:04.479: E/AndroidRuntime(2113): at android.renderscript.BaseObj.finalize(BaseObj.java:116)
10-10 15:27:04.479: E/AndroidRuntime(2113): at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:187)
10-10 15:27:04.479: E/AndroidRuntime(2113): at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:170)
10-10 15:27:04.479: E/AndroidRuntime(2113): at java.lang.Thread.run(Thread.java:856)
Run Code Online (Sandbox Code Playgroud)
我的所有 RenderScript 调用都包含在信号量中,以防止同一脚本并行运行。谁能告诉我这条消息的含义以及如何防止它?
我尝试使用Android的原生位图中的Bitmap.compress方法.从API 14开始,CompressFormat.WEBP是此方法支持的格式.但是,无论我设置什么样的质量值,即使是100,它似乎总是被压缩有损.有没有办法强制松散的WEBP压缩,如果你想存储alpha,还有控制权?
在Android 2.x设备上运行时,我的相机应用程序总是会出现异常.在较新的Android设备上,该应用运行良好.
堆栈跟踪:
10-31 19:51:52.187: W/System.err(14904): java.lang.RuntimeException: startPreview failed
10-31 19:51:52.195: W/System.err(14904): at android.hardware.Camera.startPreview(Native Method)
10-31 19:51:52.195: W/System.err(14904): at com.example.MainActivity.startCamera(MainActivity.java:418)
10-31 19:51:52.195: W/System.err(14904): at com.example.MainActivity.surfaceChanged(MainActivity.java:467)
10-31 19:51:52.195: W/System.err(14904): at android.view.SurfaceView.updateWindow(SurfaceView.java:558)
10-31 19:51:52.195: W/System.err(14904): at android.view.SurfaceView.dispatchDraw(SurfaceView.java:350)
10-31 19:51:52.195: W/System.err(14904): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
10-31 19:51:52.195: W/System.err(14904): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
10-31 19:51:52.195: W/System.err(14904): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
10-31 19:51:52.195: W/System.err(14904): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
10-31 19:51:52.195: W/System.err(14904): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
10-31 19:51:52.195: W/System.err(14904): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
10-31 19:51:52.195: W/System.err(14904): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
10-31 19:51:52.195: W/System.err(14904): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
10-31 19:51:52.195: W/System.err(14904): at android.view.ViewGroup.drawChild(ViewGroup.java:1644) …
Run Code Online (Sandbox Code Playgroud) android ×7
java ×3
android-ndk ×2
bitmap ×2
arrays ×1
camera ×1
canvas ×1
exception ×1
performance ×1
renderscript ×1
surfaceview ×1
webp ×1