0
点赞
收藏
分享

微信扫一扫

Android 性能优化 - 彻底解决内存抖动,移动APP开发框架盘点

云竹文斋 2022-04-14 阅读 15

前言

一般Android面试分为两部分:Java部分和Android部分,下面说一下自己面试过程遇到的一些具体题目和一些相关知识点。

if (j < (lotsOfInts[i].length - 1)) {
rowAsStr += ", ";
}
}
}

}

public int[] getSorted(int[] input) {
int[] clone = input.clone();
Arrays.sort(clone);
return clone;
}

}

发现 rowAsStr 对象在被不断地创建。 我们可以把它优化一下

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
imPrettySureSortingIsFree();

}
});
}

/**

  •  排序后打印二维数组,一行行打印
    */
    public void imPrettySureSortingIsFree() {
    int dimension = 300;
    int[][] lotsOfInts = new int[dimension][dimension];
    Random randomGenerator = new Random();
    for (int i = 0; i < lotsOfInts.length; i++) {
    for (int j = 0; j < lotsOfInts[i].length; j++) {
    lotsOfInts[i][j] = randomGenerator.nextInt();
    }
    }

//优化以后
StringBuilder sb = new StringBuilder();
String rowAsStr = “”;
for(int i = 0; i < lotsOfInts.length; i++) {
//清除上一行
sb.delete(0,rowAsStr.length());
//排序
int[] sorted = getSorted(lotsOfInts[i]);
//拼接打印
for (int j = 0; j < lotsOfInts[i].length; j++) {
// rowAsStr += sorted[j];
sb.append(sorted[j]);
if(j < (lotsOfInts[i].length - 1)){
// rowAsStr += ", “;
sb.append(”, ");
}
}
rowAsStr = sb.toString();
Log.i(“ricky”, "Row " + i + ": " + rowAsStr);
}

}

public int[] getSorted(int[] input) {
int[] clone = input.clone();
Arrays.sort(clone);
return clone;
}

}

这样就不会内存抖动了

能找到问题,这个问题就基本解决了。

下面是避免发生内存抖动的几点建议:

  • 尽量避免在循环体内创建对象,应该把对象创建移到循环体外。
  • 注意自定义View的onDraw()方法会被频繁调用,所以在这里面不应该频繁的创建对象。
  • 当需要大量使用Bitmap的时候,试着把它们缓存在数组中实现复用。
  • 对于能够复用的对象,同理可以使用对象池将它们缓存起来。

其他

分析面板 面板列名含义如下:

Name方法的详细信息,包括包名和参数信息
col 3 isright-aligned
col 2 iscentered
zebra stripesare neat
Incl Cpu TimeCpu执行该方法该方法及其子方法所花费的时间
Incl Cpu Time %Cpu执行该方法该方法及其子方法所花费占Cpu总执行时间的百分比
Excl Cpu TimeCpu执行该方法所话费的时间
Excl Cpu Time %Cpu执行该方法所话费的时间占Cpu总时间的百分比
Incl Real Time该方法及其子方法执行所话费的实际时间,从执行该方法到结束一共花了多少时间
Incl Real Time %上述时间占总的运行时间的百分比
Excl Real Time %该方法自身的实际允许时间
Excl Real Time上述时间占总的允许时间的百分比
Calls+Recur调用次数+递归次数,只在方法中显示,在子展开后的父类和子类方法这一栏被下面的数据代替
Calls/Total调用次数和总次数的占比

总结

开发是面向对象。我们找工作应该更多是面向面试。哪怕进大厂真的只是去宁螺丝,但你要进去得先学会面试的时候造飞机不是么?

这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

相信它会给大家带来很多收获:

960页全网最全Android开发笔记

资料太多,全部展示会影响篇幅,暂时就先列举这些部分截图

示会影响篇幅,暂时就先列举这些部分截图

Android开发不会这些?如何面试拿高薪!

举报

相关推荐

0 条评论