小编Mar*_*los的帖子

启用了largeHeap的位图回收

在启用largeHeap选项之前,我正在处理大型位图,它几乎消耗了应用程序可用的整个内存,并且通过导航回收它并加载新的内存几乎可以在完整的堆上运行.但是,当某些操作需要更多内存时,应用程序崩溃.所以我启用largeHeap=true了更多的内存.

但这样做有一个意外的行为,它看起来像recycle()位图的方法不工作的大部分时间,并在58MB工作的内存(并超过有时抛出的应用程序OutOfMemoryException)现在消耗内存成倍而且还在不断增加(目前测试我确实来了231Mb分配的内存),预期的行为是内存管理继续工作,应用程序将不会使用超过60Mb.

我怎么能避免这种情况?还是有效地回收位图?

编辑:实际上,我OutOfMemoryError在设备上分配超过390Mb的内存时给了它一个.读取GC_*日志显示只有GC_FOR_ALLOC有时会释放3.8Mb,但几乎从未在其他GC运行中释放过某些内容.

android android-image android-memory android-largeheap

10
推荐指数
1
解决办法
4611
查看次数

将第三方库(libs.a)与NDK链接

我正在构建一个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 java-native-interface android android-ndk

8
推荐指数
1
解决办法
1万
查看次数

通过JNI获取Java ByteBuffer的指针

如何获得指向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++使用的内存.

c++ java java-native-interface bytebuffer android-ndk

8
推荐指数
1
解决办法
4329
查看次数

画廊活动"以图像为中心"

我正在创建一个可滚动的图像选择器,但有一些信息我希望在每个图像中显示时,我的问题是,在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得到更新.

有小费吗?

events android scroll gallery coverflow

7
推荐指数
1
解决办法
2411
查看次数

java.io.IOException:SSL握手失败:SSL库失败,通常是协议错误

我正在尝试使用来自服务器的给定链接的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下载相同的文件.

谢谢

url android stream

7
推荐指数
1
解决办法
5626
查看次数

读取Wifi/3G状态的异常

嗨,我有以下代码,读取网络/ 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

7
推荐指数
1
解决办法
1万
查看次数

Java反射性能问题

我知道有很多主题都在讨论反射性能.

甚至官方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)

java reflection performance benchmarking

7
推荐指数
2
解决办法
5366
查看次数

Dalvik乱用图书馆代码和项目不能再运行了

在我的机器上更新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)

android dalvik adt android-library

7
推荐指数
1
解决办法
4180
查看次数

在Android中将字节[]渲染为位图

我从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.

java android

6
推荐指数
1
解决办法
2万
查看次数

打开一个PopupWindow,让外面的东西仍然可以触摸

如何在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 popupwindow

6
推荐指数
2
解决办法
1万
查看次数