小编emr*_*duz的帖子

到bitmap.recycle(),或不到bitmap.recycle()

几天前,我们在Play商店发布了一个应用程序,它处理高质量的位图,并且都是关于编辑它们的.

当我们意识到20%的设备出现内存错误时,一切进展顺利.所以我们检查了我们的代码,发现Android没有发布用于在某些设备上存储位图数据的本机内存.在这种情况下,我们欢迎recycle命令.

内存错误消失了(至少在高清设备中).无论如何,我们很高兴.但今天我们开始看到50%的设备开始出现另一个错误:"无法复制回收的位图"

我们很沮丧.在我们代码中的两个bitmap.copy()行中,有一半的设备无法在同步中执行这两行:

Bitmap anotherBitmap = bitmap.copy( bitmap.getConfig(), true );
bitmap.recycle();
Run Code Online (Sandbox Code Playgroud)

所以我们删除了回收并发布了另一个更新,决定限制设备屏幕大小,所以小的不会给我们一个糟糕的评级.

这是我的问题.为什么有些设备可以在回收前复制,有一半不能?

我阅读了Google的位图相关文档,并且已经知道如何在vm的堆和本机堆上存储位图,垃圾收集如何处理内存不足错误等.Google提供的用于加载和编辑大位图的示例代码几乎与我们的相同.

阅读了很多博客,google组线程,github代码示例...我想我还需要一本关于Android位图的好文档/书.

PS:我们已经使用inSampleSize在解码位图时缩放位图.

编辑 - 以下是崩溃报告中的一些数据:

所有设备都是非root用户.在大多数情况下,使用的内存介于25%和35%之间.

Manufacturers: 
57% LG
31% Samsung
10% Casper Via V5 (Turkey based company, sells rebranded Chinese phones)

Devices:
81% LG D855 (G3)
18% LG D802TR (G2)
----
66% Samsung SM N910C (Galaxy Note 4)
20% Samsung SM A700F (Galaxy A7)

Operating Systems:
68% Android 5
31% Android 4

OS 5 Details
69% Android 5.0
30% Android 5.0.1

OS4 Details
66% …
Run Code Online (Sandbox Code Playgroud)

android bitmap recycle

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

iPad 2 Safari显示像素化的html文本和图像

我们正在为iPad和iPhone开发HTML5 + CSS3应用程序.该应用程序在iPad和所有iPhone上运行良好,但是,iPad 2在启动时显示像素化的html dom对象,并且有时会保持这种状态,有时会持续一段时间.

应用程序专为触摸和手势而设计.我们使用translate3D在滚动对象上进行硬件加速.我们也使用jQuery(v1.7),但我们设计的滚动条是纯javascript,没有框架.jQuery主要用于查找/添加/删除dom对象和ajax.除了jQuery之外,其他所有内容都是内部编写的,包括我们正在使用的jQuery插件.

正如我所说,动画是通过translate3D实现的.对于滑动效果,我们正在改变-webkit-transform的x或y轴值,并且当接收到touchend事件时,使用javascript,-webkit-transition和translate3D实现动量动画.在编写应用程序时,Apple的iOS Safari文档被广泛用作指南.

尽管该应用程序在iPad,iPod Touch(第二代),iPhone 3gs和iPhone 4上运行良好,但在iPad 2上进行测试时,我们开始看到这个像素化屏幕.最奇怪的是,3d加速内容是唯一获得像素化的部分.我附上了两个截图,一个来自iPad,另一个来自iPad2.你可以看到我的意思(它们是在同一天的不同时间拍摄的,因此内容不同,对不起).

主要内容(带图像的方框)可以通过触摸事件上下滑动.在iPad2上,只有这部分是像素化的.在滑动时,像素化大部分时间都处于停留状态,但在某些测试中,它会在几秒钟后重置.

另外,html内容包含以下内容:

<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
Run Code Online (Sandbox Code Playgroud)

我们通过CSS开始硬件加速,主滑动对象具有以下属性:

-webkit-transform: translate3d(0,0,0);
Run Code Online (Sandbox Code Playgroud)

对于闪烁校样,图像不在任何具有背景颜色的dom对象内,并具有以下属性:

-webkit-backface-visibility: hidden;
Run Code Online (Sandbox Code Playgroud)

为了在某​​些情况下进行更多的闪烁校对,我们使用了这个属性(但是屏幕截图中的像素化内容没有分配这个):

-webkit-perspective: 0;
Run Code Online (Sandbox Code Playgroud)

该应用程序暂时没有'apple-touch-startup-image',所以我们首先想到的是启动捕获ios使得有点混乱.但事实证明这不是问题,因为在通过wi-fi下载内容之后,像素化保持不变.

如果有人遇到过这个或类似的问题并且能够解决它,请回答,因为我们没有其他想法.

我试图提供尽可能多的信息,这是我承诺的屏幕截图:

iPad:

iPad屏幕截图,主屏幕正常

iPad 2:

iPad 2屏幕截图,您可以看到主屏幕像素化严重

html5 mobile-safari css3 ios translate3d

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

保持从Android JNI调用java方法

我正试图通过Proguard混淆Android应用程序代码.在使用proguard处理后,应用程序自行工作,但是从c到java的本机调用失败了java.lang.NoSuchMethodError.

此代码来自本机部分,其中调用java类实例,名为EngineStarted:

void callEngineStarted( JNIEnv* env, bool isStreamOne )
{
    jclass cls;
    if(isStreamOne == true) {
        cls = ( *env )->GetObjectClass( env, currentObjectOne );
    } else {
        cls = ( *env )->GetObjectClass( env, currentObjectTwo );
    }

    jmethodID midCallBack = ( *env )->GetMethodID( env, cls, "EngineStarted", "(I)V" );
    if (0 == midCallBack) {
        LOGW("Could not find EngineStarted method in class");
        return;
    }

    if(isStreamOne == true) {
        ( *env )->CallVoidMethod( env, currentObjectOne, midCallBack, 1 );
    } else {
        ( *env …
Run Code Online (Sandbox Code Playgroud)

java java-native-interface android proguard android-ndk

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

c ++ O3优化中断工作while循环

我有这个简单的代码,它在 pcm wav 文件中使用 fseek 逐步搜索文件中的“数据”:

  FILE * waveFile;
  waveFile = fopen ( this->fileLocation.c_str ( ), "rb" );

  // ... some other code here between, then ... //

  int seekTo = 0;
  bool found = false;
  char data[4];

  rewind ( waveFile );
  while ( !found && ( fseek ( waveFile, seekTo, SEEK_SET ) == 0 )) {
    fread ( data, sizeof ( data ), 1, waveFile );
    if (( std::strcmp ( data, "data" ) == 0 ) || ( std::strcmp …
Run Code Online (Sandbox Code Playgroud)

c++ fseek compiler-optimization c++11

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