小编bae*_*aek的帖子

android:largeHeap ="true"约定?

我正在写一个图片库应用程序,我一直遇到内存不足错误.我缓存了所有图像,但是当我尝试快速切换图像时会出现问题.我假设应用程序分配的内存比GC有时间释放它们更快(因为当我慢慢切换图像时不会发生崩溃).

在对这个问题进行了几天的敲击之后,我终于决定尝试在清单文件中给出largeHeap设置.在此设置之后,无论我在图像之间切换多快,我的应用程序都不会崩溃.

现在,我想知道是否存在使用largeHeap设置的任何约定或一般准则,因为如果使用注释应用程序使用largeHeap可能没有多大意义.一般来说,哪些应用程序适合largeHeap设置?

谢谢

android memory-management

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

如果实例变量仍有引用,Java GC是否会破坏对象?

我已经在线阅读了一些Java垃圾收集指南,但我仍然有点不清楚,并希望确保我的代码中没有内存泄漏.

Java GC是否收集丢失其引用的对象,但其变量仍有引用?

所以我想说我有SomeObject:

public class SomeObject {
    public ObjectVar var;

    public SomeObject() {
        var = new ObjectVar();
    }
}
Run Code Online (Sandbox Code Playgroud)

我的代码:

SomeObject obj1 = new SomeObject();
SomeObject obj2 = new SomeObject();
obj2.var = obj1.var;
obj1 = null;
Run Code Online (Sandbox Code Playgroud)

所以obj1的var有引用,但是obj1不再有任何引用.那么,GC会破坏obj1,但保持var存活吗?(我假设是这样;只是想确定).谢谢!

java garbage-collection

15
推荐指数
1
解决办法
4633
查看次数

将SeekBar的进度颜色设置为透明

这是我想要完成的图片,其中没有进展颜色(透明),带有纯灰色背景条:

搜索条

我试过了

android:progressTint="#00000000"
Run Code Online (Sandbox Code Playgroud)

但是这会将整个栏(进度条和后栏)设置为透明.

我也尝试过:

android:progressDrawable="@drawable/customseekbar"
Run Code Online (Sandbox Code Playgroud)

customseekbar.xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

<item
    android:id="@android:id/background"
    android:drawable="@drawable/seekbar_background" />

<item android:id="@android:id/progress">
    <clip android:drawable="@drawable/seekbar_background" />
</item>
Run Code Online (Sandbox Code Playgroud)

和seekbar_background.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid
        android:color="#FF555555" />
</shape>
Run Code Online (Sandbox Code Playgroud)

但后来我变得肥胖丑陋:

notwhatiwant

我在这做错了什么?谢谢

android seekbar

12
推荐指数
3
解决办法
4567
查看次数

setVisibility()和setAlpha()之间的区别

setVisibility(View.GONE)和setAlpha(0f)有什么区别?

android android-view

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

如何将JNI与AAR库一起使用?

我正在创建一个Android库(.aar文件),我需要使用JNI.(我非常清楚谷歌如果可能的话,不鼓励使用JNI/NDK,但在这种情况下,这是不可能的).

我从一个独立的hello-jni示例APP(首先学习JNI)开始,使用以下文件:

HelloJni.java

public class HelloJni extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        TextView  tv = new TextView(this);
        tv.setText( stringFromJNI() );
        setContentView(tv);
    }

    public native String  stringFromJNI();

    static {
        System.loadLibrary("hello-jni");
    }
}
Run Code Online (Sandbox Code Playgroud)

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := hello-jni
LOCAL_SRC_FILES := hello-jni.c

include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)

Application.mk

APP_ABI := all
Run Code Online (Sandbox Code Playgroud)

你好,jni.c

#include <string.h>
#include <jni.h>

jstring
Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
                                                  jobject thiz )
{
    return (*env)->NewStringUTF(env, "Hello from JNI!");
}
Run Code Online (Sandbox Code Playgroud)

以下构建精美的应用程序(apk),我能够在我的设备上运行它,打印"来自JNI的Hello!" 正如所料.

现在,我做了同样的事情,但我没有使用apk,而是建立了一个库项目来生产aar.我保留了除HelloJni.java之外的所有文件,我将其更改为以下内容:

HelloJni.java

public class HelloJni …
Run Code Online (Sandbox Code Playgroud)

java-native-interface android android-ndk aar

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

字节数组缓冲图像转换速度慢

我有一个简单的服务器端代码,它接收一个表示JPEG格式图像的字节数组,并返回图像的尺寸.

public String processImage(byte[] data) {
    long startTime = System.currentTimeMillis();
    ByteArrayInputStream stream = new ByteArrayInputStream(data);
    BufferedImage bufferedImage;
    bufferedImage = ImageIO.read(stream);

    int height = bufferedImage.getHeight();
    int width = bufferedImage.getWidth();

    long endTime = System.currentTimeMillis();

    return "height="+height+" | width="+width+" | elapsed="+(endTime-startTime);
}
Run Code Online (Sandbox Code Playgroud)

它有效,但问题是它的速度慢得令人无法接受.对于100KB的图像,它需要6s.对于900KB的图像,它需要30秒.这是预期的吗?有没有办法让字节数组更快地进行bufferedImage转换?

仅供参考,抓住高度/宽度并不是我打算做的唯一事情.我最终想要处理bufferedImage.所以获得高度/宽度只是一个示例代码.

java bufferedimage bytearrayinputstream javax.imageio

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

android重用从资源加载的图像吗?

所以我在一个Activity中有几个ImageView,它们都使用来自资源的相同图像位图.

ImageViewOne.setImageResource(R.drawable.frequently_used_image);
ImageViewTwo.setImageResource(R.drawable.frequently_used_image);
ImageViewThree.setImageResource(R.drawable.frequently_used_image);
Run Code Online (Sandbox Code Playgroud)

android是否分配内存以加载位图一次并将其重用于使用相同资源的所有其他ImageView?或者它每次设置为ImageView 都会加载位图吗?

谢谢!

android bitmap android-imageview android-resources

5
推荐指数
1
解决办法
1235
查看次数

Android SeekBar的progressBackgroundTint在API v21中无效

我注意到,当更改SeekBar的progressBackgroundTint属性时,该属性将被完全忽略并且无效。设置为哪种颜色都没有关系;它在我的设备上始终显示为灰色。这是Android的错误,还是我做错了什么?当我在Android Studio中将预览切换到v22时,可以正确设置预览。但v21并非如此。

我的搜索栏:

<SeekBar
    android:layout_width="300dp"
    android:layout_height="wrap_content"
    android:id="@+id/seekBar"
    android:max="100"
    android:progress="50"
    android:progressBackgroundTint="#ff4babe8"/>
Run Code Online (Sandbox Code Playgroud)

我还尝试将progressBackgroundTintMode设置为所有已知值,但仍然无效。有人知道为什么吗?

android seekbar material-design android-5.0-lollipop

5
推荐指数
1
解决办法
1328
查看次数

Gradle测试命令没有运行任何测试

我有一个简单的测试实现,我可以在Android Studio上运行.这个类在我的项目的/ src/androidTest目录里面.ApplicationTest.java:

public class ApplicationTest extends ApplicationTestCase<Application> {
    public ApplicationTest() {
        super(Application.class);
    }

    @Override
    protected void setUp() throws Exception {
        createApplication();
    }

    @SmallTest
    public void testSample() {
        assertEquals("Pass: ", 50, 50);
        assertEquals("Fail: ", 50, 49);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用以下命令通过gradle运行时,没有任何运行.我正在尝试的Gradle命令:

./gradlew test
Run Code Online (Sandbox Code Playgroud)

输出:

c-08e-abaek-0:HelloTest abaek$ ./gradlew test
:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:checkDebugManifest
:app:prepareDebugDependencies
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:generateDebugBuildConfig UP-TO-DATE
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets UP-TO-DATE
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources UP-TO-DATE
:app:mergeDebugResources UP-TO-DATE
:app:processDebugManifest UP-TO-DATE
:app:processDebugResources UP-TO-DATE
:app:generateDebugSources UP-TO-DATE
:app:processDebugJavaRes UP-TO-DATE
:app:compileDebugJava UP-TO-DATE
:app:preCompileDebugUnitTestJava …
Run Code Online (Sandbox Code Playgroud)

android gradle android-studio

3
推荐指数
1
解决办法
3093
查看次数

ListView适配器getView()获取错误的项目

我有一个ListView,我输入以下代码来查看我的BaseAdapter的getView()过程.

@Override

public View getView(int position, View convertView, ViewGroup parent) {

    Log.d("getView()","Fetching Row: " + position);
    ...
}
Run Code Online (Sandbox Code Playgroud)

当我慢慢向下滚动列表时,我注意到发生了一些奇怪的事情.即使我在列表位置40-50ish,它仍然调用getView()的位置为0-7.这是我的日志的样子:

05-14 11:46:13.989: I/getView()(18681): Fetching Row: 45
05-14 11:46:14.039: I/getView()(18681): Fetching Row: 0
05-14 11:46:14.049: I/getView()(18681): Fetching Row: 1
05-14 11:46:14.049: I/getView()(18681): Fetching Row: 2
05-14 11:46:14.049: I/getView()(18681): Fetching Row: 3
05-14 11:46:14.059: I/getView()(18681): Fetching Row: 4
05-14 11:46:14.059: I/getView()(18681): Fetching Row: 5
05-14 11:46:14.059: I/getView()(18681): Fetching Row: 6
05-14 11:46:14.069: I/getView()(18681): Fetching Row: 7
05-14 11:46:14.320: I/getView()(18681): Fetching Row: 46
05-14 …
Run Code Online (Sandbox Code Playgroud)

android android-listview

0
推荐指数
1
解决办法
2446
查看次数