您的位置:首页 > 其它

Adnroid一个例子引发的思考

2014-09-16 20:28 302 查看
12年11月1日开始学Android到现在,一直开发Android应用也一年半了,随着接触的东西越来越多,需求越来越繁杂要求也越来越高,渐渐的发现很多这种情况:

1.同样的写法在自己手机上面正确运行,换一个手机就不行。

比如我写了个layout_marginLeft=12dp,在米3正确运行,到了三星N7000(2.3.5)就没用了,显示完全错位,换成paddingLeft=12dp马上就好了。boss经常问我为什么你手机行,我手机这里不行,其他手机会不会出问题?我无言以对。(经常有这种情况)

2.分享一张图片,到微信朋友圈就很模糊。

ios那边分享一张200多k的图片,下载下来还是原图,我分享一张50多k的图片,下载下来32k,完全模糊了,而且超过60k就不能分享了。然后别人就说我代码的问题,ios那边都可以,我也无言以对(就几行代码),至今没找到解决办法。

3.屏幕适配的问题

有些界面放在大屏幕手机和小屏幕手机完全不同,最后不得不全部用代码根据屏幕比例来设置宽高位置。boss又说,为什么ios的那么好看,我折腾这么久,我也无言以对。

到底是自己技术不行,经验不足,还是对于Android知道的太少,又或是Android开发就是这样修修补补,折腾来折腾去,勉勉强强运行?有多少人对自己写的Android程序有信心不报错?

我写了一个demo,程序有两个Activity切换,第一个界面加载一张图,点击进入第二个界面,第二个界面点击回到第一个界面,就这么简单

要加载的图片:



图片大小:960x800 184Kb

MainActivity:

public class MainActivity extends Activity {
private ImageView iv;
private Bitmap bmp = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv = (ImageView) findViewById(R.id.main_iv);
try {
InputStream in = getAssets().open("test.jpg");
bmp = BitmapFactory.decodeStream(in);
in.close();
iv.setImageBitmap(bmp);
} catch (IOException e) {
e.printStackTrace();
}
}

public void onclickStart(View v) {
startActivity(new Intent(this, TwoActivity.class));
finish();
if (null != bmp && !bmp.isRecycled()) {
bmp.recycle();
bmp = null;
System.gc();
}
}

@Override
public void finish() {
super.finish();
Log.i("test_info", "finish():");
}


  TowActivity:

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

@Override
public boolean onTouchEvent(MotionEvent event) {
startActivity(new Intent(this, MainActivity.class));
finish();
return super.onTouchEvent(event);
}
}


  这个界面点击下就会启动主界面,自己finish

然后问题来了,启动程序,来回点20次不到就发生OOM了,问题是我图片不是已经释放了吗?

下面是米3这个程序的内存使用情况,刚打开时:



来回点了四五次后



十次左右后:发现占用对内存越来越大,占用的比例越来越多



直到接近128M,使用率99%



最后总共点了二十多次,就OOM了,程序顺利崩溃



至此,我已经不敢写代码了,加载一张200k的图片,来回点20次就崩溃,图片释放了吗,释放了,界面释放了吗,释放了,为什么最后还是内存溢出?我无言以对!!

以后还敢让别人来回点你的程序吗?以后还敢加载几百k的图片吗?我已经没有任何底气了.......

不知道同为Android的开发者们有什么好的建议....求拯救
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: