在启用largeHeap选项之前,我正在处理大型位图,它几乎消耗了应用程序可用的整个内存,并且通过导航回收它并加载新的内存几乎可以在完整的堆上运行.但是,当某些操作需要更多内存时,应用程序崩溃.所以我启用largeHeap=true了更多的内存.
但这样做有一个意外的行为,它看起来像recycle()位图的方法不工作的大部分时间,并在58MB工作的内存(并超过有时抛出的应用程序OutOfMemoryException)现在消耗内存成倍而且还在不断增加(目前测试我确实来了231Mb分配的内存),预期的行为是内存管理继续工作,应用程序将不会使用超过60Mb.
我怎么能避免这种情况?还是有效地回收位图?
编辑:实际上,我OutOfMemoryError在设备上分配超过390Mb的内存时给了它一个.读取GC_*日志显示只有GC_FOR_ALLOC有时会释放3.8Mb,但几乎从未在其他GC运行中释放过某些内容.
我正在构建一个Android apk,它使用第三方的一些本机库,这些库位于静态对象代码库(.a文件)中,我需要编写一个JNI包装器来访问Java这些函数.
这些库已经使用交叉编译器进行编译,并且本身就是Android.
如何编译链接到.a libs文件中的函数的JNI源?
这是我的Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_LDLIBS := -llog
LOCAL_MODULE := ndk1
LOCAL_SRC_FILES := native.c
include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)
当我编译时,我只获得编译的native.c文件.
如何获得指向Java ByteBuffer内部数组的指针?
JNIEXPORT void JNICALL test(JNIEnv *env, jobject thiso) {
jclass cls = env->FindClass("java/nio/ByteBuffer");
jmethodID aloc = env->GetStaticMethodID(cls, "allocateDirect", "(I)Ljava/nio/ByteBuffer;");
jobject obj = env->CallStaticObjectMethod(cls, aloc, 1000);
}
Run Code Online (Sandbox Code Playgroud)
PS:我这样做是为了分享Java和C++使用的内存.
我正在创建一个可滚动的图像选择器,但有一些信息我希望在每个图像中显示时,我的问题是,在Gallery上有一个事件通知我图像居中?滚动时应该发生此事件.
我的布局是这样的:
<Gallery android:id="@+id/coverflow"
android:layout_width="match_parent" android:layout_height="wrap_content"
android:layout_centerInParent="true" />
<TextView android:id="@+id/author" android:layout_width="match_parent"
android:layout_height="wrap_content" android:text="Titulo livro"
android:layout_above="@id/coverflow" android:gravity="center" />
<ImageView android:id="@+id/div" android:layout_width="match_parent"
android:layout_height="wrap_content" android:src="@drawable/library_div"
android:layout_above="@id/author" />
<TextView android:id="@+id/title" android:layout_width="match_parent"
android:layout_height="wrap_content" android:text="Author"
android:layout_above="@id/div" android:gravity="center" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
我想在滚动发生时,新的iten是中间的,作者和标题TextViews得到更新.
有小费吗?
我正在尝试使用来自服务器的给定链接的URL类下载一些内容.
我的下载代码是:
URL url = new URL(downloadUrl);
InputStream stream = url.openStream();
byte[] content = new byte[stream.available()];
stream.read(content);
stream.close();
Run Code Online (Sandbox Code Playgroud)
但是在运行时我得到以下异常:
java.io.IOException: SSL handshake failure: Failure in SSL library, usually a protocol error
error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:604 0xaf076228:0x00000000)
at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.nativeconnect(Native Method)
...
Run Code Online (Sandbox Code Playgroud)
我使用的链接是这样的:
https://contentserver.com/d/761/34/215656/5de1a41ea3bc9c81978af95ed19b03286f64d9a3
Run Code Online (Sandbox Code Playgroud)
我知道如果我在浏览器上输入它,它会下载一个文件,我想通过Java下载相同的文件.
谢谢
嗨,我有以下代码,读取网络/ Wifi状态:
public String getMacAddress() {
WifiManager wm = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
return wm.getConnectionInfo().getMacAddress();
}
Run Code Online (Sandbox Code Playgroud)
这引发了
Caused by: java.lang.SecurityException: WifiService: Neither user 10032 nor current process has android.permission.ACCESS_WIFI_STATE
Run Code Online (Sandbox Code Playgroud)
和
public boolean is3G() {
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
return !(connectivityManager.getNetworkInfo(
ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED || connectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED);
}
Run Code Online (Sandbox Code Playgroud)
这引发了
Caused by: java.lang.SecurityException: ConnectivityService: Neither user 10032 nor current process has android.permission.ACCESS_NETWORK_STATE.
Run Code Online (Sandbox Code Playgroud)
在有人告诉我权限之前,那就是我的Manifest(相关部分):
<manifest>
<!-- usual tags for activitys... etc.. -->
<uses-permission android:name="android.permission.WRITE_OWNER_DATA" />
<uses-permission android:name="android.permission.READ_OWNER_DATA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" …Run Code Online (Sandbox Code Playgroud) android cellular-network 3g android-wifi android-permissions
我知道有很多主题都在讨论反射性能.
甚至官方Java文档都说反射速度较慢,但我有这个代码:
public class ReflectionTest {
public static void main(String[] args) throws Exception {
Object object = new Object();
Class<Object> c = Object.class;
int loops = 100000;
long start = System.currentTimeMillis();
Object s;
for (int i = 0; i < loops; i++) {
s = object.toString();
System.out.println(s);
}
long regularCalls = System.currentTimeMillis() - start;
java.lang.reflect.Method method = c.getMethod("toString");
start = System.currentTimeMillis();
for (int i = 0; i < loops; i++) {
s = method.invoke(object);
System.out.println(s);
}
long reflectiveCalls = System.currentTimeMillis() …Run Code Online (Sandbox Code Playgroud) 在我的机器上更新ADT和Android SDK后,我的所有项目都会出错.
现在我有这个:
PS:运行具有jar作为依赖项的项目时发生此错误(它是用proguard编译的,我们没有原始源代码再次编译它).
W/dalvikvm(3497): VFY: unable to resolve static field 994 (storeicon) in Lcom/ww/dgs/R$drawable;
D/dalvikvm(3497): VFY: replacing opcode 0x60 at 0x0042
W/dalvikvm(3497): VFY: unable to resolve static field 987 (libraryicon) in Lcom/ww/dgs/R$drawable;
D/dalvikvm(3497): VFY: replacing opcode 0x60 at 0x0060
W/dalvikvm(3497): VFY: unable to resolve static field 1069 (mainframe) in Lcom/ww/dgs/R$layout;
D/dalvikvm(3497): VFY: replacing opcode 0x60 at 0x00b1
I/dalvikvm(3497): DexOpt: unable to optimize static field ref 0x0467 at 0x16 in Lcom/ww/sharedlibrary/e;.a
D/AndroidRuntime(3497): Shutting down VM
W/dalvikvm(3497): threadid=1: thread exiting with …Run Code Online (Sandbox Code Playgroud) 我从JNI调用获取一个字节数组,并试图用它构造一个Bitmap对象.
我的问题是,以下代码返回null.
byte[] image = services.getImageBuffer(1024, 600);
Bitmap bmp = BitmapFactory.decodeByteArray(image, 0, image.length);
Run Code Online (Sandbox Code Playgroud)
关于它的任何提示?
PS:像素布局是BGR,而不是RGB.
如何在Android上打开PopupWindow并让所有其他组件都可以触摸而不会忽略PopupWindow?
这就是它的创建方式:
public class DynamicPopup {
private final PopupWindow window;
private final RectF rect;
private final View parent;
private final RichPageView view;
public DynamicPopup(Context context, RichPage page, RectF rectF, View parent) {
this.parent = parent;
rect = rectF;
window = new PopupWindow(context);
window.setBackgroundDrawable(new BitmapDrawable());
window.setWidth((int) rect.width());
window.setHeight((int) rect.height());
window.setTouchable(true);
window.setFocusable(true);
window.setOutsideTouchable(true);
view = new RichPageView(context, page, false);
window.setContentView(view);
view.setOnCloseListener(new Listener(){
@Override
public void onAction() {
window.dismiss();
}
});
}
public void show() {
window.showAtLocation(parent, Gravity.NO_GRAVITY, (int) rect.left, (int) rect.top);
} …Run Code Online (Sandbox Code Playgroud) android ×8
java ×4
android-ndk ×2
3g ×1
adt ×1
android-wifi ×1
benchmarking ×1
bytebuffer ×1
c++ ×1
coverflow ×1
dalvik ×1
events ×1
gallery ×1
performance ×1
popupwindow ×1
reflection ×1
scroll ×1
stream ×1
url ×1