我做的是一个图表程序,要自动刷新一个大概800x2000的Bitmap
现在的问题是如果我用多线程Timer来刷新的话,在屏幕旋转的时候系统销毁Activity不会回收Bitmap
转两下就内存溢出了,我在网上搜了很多相关的方法,都是片段,放进去都不成功。不知道大家是怎么处理的。
代码如下:主view 的onCreate
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
                  adptr = new Adapter();  getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.viewer);  ivData = (ImageView) findViewById(R.id.ivData);
ivFrame = (ImageView) findViewById(R.id.ivFrame);
ivData.setScaleType(ScaleType.MATRIX);
ivFrame.setScaleType(ScaleType.MATRIX);
 
ivData.setImageBitmap(adptr.mBitmapData);
ivFrame.setImageBitmap(adptr.mBitmapFrame);
ivData.setOnTouchListener(this);
}
其中的Adapter类是用来控制数据的,用timer自动获取数据并且更新mBitmapData和mBitmapFrame
我在网上看到方法都是类似APIDemo里面用重写View的onDraw事件并且加上invalidate()方法
但是APIDemo里面的View都是在新建的View类里面重写onDraw事件,像我这种使用xml布局文件的情况
如何重写某个View的onDraw事件呢?初学Android和Java,问题太弱智的话大家别见怪

解决方案 »

  1.   


    自动横竖旋转时,activity每次都会重新调用onCreate,在AndroidManifest.xml你的activity里加入红色部分,可以避免。<activity android:name="....." android:configChanges="orientation|keyboardHidden"></activity> 
      

  2.   

    哇哈哈哈,果然不会泄漏了,原来这么简单,不过旋转的时候不会更新了,我设计的横屏和竖屏的设计不同,所以还需要重写onConfigurationChanged事件
    谢谢楼上的