本帖最后由 jiangyongtao 于 2010-09-16 21:00:31 编辑

解决方案 »

  1.   

    3G我不太清楚。按home键,只是把桌面调到前端显示, 这时你的activity是调了 onPause,但是再进去,不会调用onCreate和OnStart。具体你可以看看sdk文档中 Activity lifecycle那张图。出问题肯定是你流程没有处理好。
      

  2.   

    serfaceDestroy()进这个函数 的时候 就已经无法声请渲染了.......  自己试下吧
      

  3.   

    这内存释放真的是一个无底洞   android既然不让我们控制home键
    最起码让我们知道 用户是否点击了Home吧
      

  4.   

    freshui  同学 我这个做是刻意的 我在onStop生命周期 写了finish()按道理回到主界面再返回应用应该会进OnResume()  但是opengl 的话不允许这样做
    因为再次返回进OnResume  纹理就全部消失了.....  但是内存依然没释放   纠结吧?
      

  5.   

    1.你在pause activity的时候同时pasue了GLThread没有?GLThread要和activity同步
    2.按home键再回去不是直接执行oncreate 除非进程完全被杀掉
    3.你用了glDeleteTextures没? 删除texture的时候要删除对应的buffer还要调用glDeleteTextures
    4.如果你要更有效的控制memory 建议你用ndk 个人意见~
      

  6.   

    1:请看再pause中释放内存,又很多不定因素,因为很多东西触发onpause函数  我第三小结有说到
    2:我再Activity的onStop 里面写的finish()  请看8楼
    3:glDelteTexture 释放内存没错 ,但是我们只能再用户不需要纹理的时候释放,就是说当前Activity失去焦点的时候释放, Activity失去焦点分别会调用onPause与onStop  请看蓝色字第三部分
    4:4点建议不错,可惜我C不好......
      

  7.   

    1. 我的意思是 你在Activity的onPause调用了GLSurfaceView的onPause函数没?在Activity的onResume调用了GLSurfaceView的onResume函数没?
    2. 如果你遵循了Acitvity和GLThread同步 在resume的时候 纹理不会消失 如果你在onStop里面写了finish 那自然只能重新开始了 然后你也并没有释放内存 同时GLThread依然在运转 容易出现卡死的情况
    3. 我还是不太清楚你到底想实现什么 能否简单的表达一下 Android并不会不考虑释放内存的问题 google那群人不是吃干饭的
      

  8.   

    感觉如果不在onStop中加入finish的话。按照onResume,onPause的流程来跑的,你的代码就没有内存的问题了啊。能否解释下,为什么需要这么做呢?
      

  9.   

    版主应该学习OPENGL ES的开发,再来发表,好像什么都不懂。
      

  10.   

    楼主 不用每次都loadTexture的,一次loadTexture之后就可以了