ZXing的CaptureActivity在其他activity切换回来时会出现黑屏现象,跟踪发现surfaceDestroyed并不一定能调用到。
在ZXing项目找到zxing不支持tabhost的答复。
Project Member #1 srowen The app doesn't use a TabHost. If you are writing your own app, indeed, you may need to write different code! this part is not a library that is supposed to work in other contexts.
虽然项目采用tabactivity搭建框架,但CaptureActivity是单独的activity。
针对surfaceDestroyed在activity切换时不会总是调用的问题,https://github.com/commonsguy/cw-advandroid/tree/master/Camera/Preview/ 的解决方法值的参考。
也即是把打开摄像头的动作延迟到surfaceChanged时调用。
场景:
假设有一个view,在RotateAnimation动画完后需要隐藏掉,但调用 setVisibility 失效。
解决的办法:
view.setAnimation(null),再setVisibility
在JNI中使用stl的东西,比如std::string,不是说你的文件是.cpp的然后NDK就会用g++来编译,这家伙根本就不管你的文件是c还是cpp。那么玄机在哪里呢?关键是你的Application.mk文件里面还得指定APP_STL
例如:APP_STL := stlport_static ,规则如下:
# system - 使用默认最小的C++运行库,这样生成的应用体积小,内存占用小,但部分功能将无法支持
# stlport_static - 使用STLport作为静态库,这项是Android开发网极力推荐的
# stlport_shared - STLport 作为动态库,这个可能产生兼容性和部分低版本的Android固件,目前不推荐使用。
# gnustl_static - 使用 GNU libstdc++ 作为静态库
# 使用STLport作为静态库,这项是Android开发网极力推荐的
这个问题真蛋疼啊,困扰了我半天,还好,工程在附件。
编译过程如下:
dr@dr-OptiPlex-3010:~/workspace/StlTest/jni$ ~/android-ndk-r5b/ndk-build clean Clean: jni_stltest [armeabi] Clean: stdc++ [armeabi] Clean: stlport_shared [armeabi] Clean: stlport_static [armeabi] dr@dr-OptiPlex-3010:~/workspace/StlTest/jni$ ~/android-ndk-r5b/ndk-build Compile++ thumb : jni_stltest <= jni_main.cpp StaticLibrary : libstdc++.a Prebuilt : libstlport_static.a <= <NDK>/sources/cxx-stl/stlport/libs/armeabi/ SharedLibrary : libjni_stltest.so Install : libjni_stltest.so => libs/armeabi/libjni_stltest.so dr@dr-OptiPlex-3010:~/workspace/StlTest/jni$