Android开发性能优化工具
1. LeakCanary
LeakCanary用于内存泄露检测,并友好提示给开发者,便于分析和修改。
GitHub:leakcanary
LeakCanary 中文使用说明
LeakCanary集成后会在Activity.onDestory()
后会自动监测Activity的内存泄露,仍需要在Fragment.onDestory()
后主动监测,保证其工作。
dump耗时较长,需要耐心等待。
后根据堆栈信息修复代码。
使用方法:
在Application中初始化:
public class MyApplication extends Application {
//...
private void leakCanary() {
if (LeakCanary.isInAnalyzerProcess(this)) {
return;
}
mRefWatcher = LeakCanary.install(this);
}
public RefWatcher getRefWatcher() {
return mRefWatcher;
}
//提供获取方法
public static RefWatcher getRefWatcher(Context context) {
MyApplication application = (MyApplication) context.getApplicationContext();
return application.getRefWatcher();
}
}
监测Fragment:
public class BaseFragment extends Fragment {
protected Context mContext;
@Override public void onAttach(Context context) {
super.onAttach(context);
this.mContext = context;
}
@Override public void onDestroy() {
MyApplication.getRefWatcher(mContext)
.watch(this);
super.onDestroy();
}
}
2. CrashWoodPecker
GitHub:CrashWoodpecker
A nice uncaught exception handler library likes Square’s LeakCanary. Support showing logs both on Logcat & Woodpecker.
优雅的异常捕捉并提示。
public class MyApplication extends Application {
@Override public void onCreate() {
super.onCreate();
if (BuildConfig.DEBUG) {
CrashWoodpecker.flyTo(this);
}
}
}
3. BlockCanary
GitHub:AndroidPerformanceMonitor
BlockCanary — 轻松找出Android App界面卡顿元凶
BlockCanary分析android卡顿
这个库使用了Looper.getMainLooper().setMessageLogging(mainLooperPrinter);
来侵入式的检测,确实不一般。
通过该方法修改卡顿上限:
public int provideBlockThreshold() {
return 1000;
}
4. 代码审查工具
静态代码检查工具:Android studio—Analyze—Inspect Code.../Code cleanup...
Android lint工具是Android studio中集成的一个代码提示工具,它主要负责对你的代码进行优化提示,包括xml和java文件,很强大。
编写完代码及时进行lint测试,会让我们的代码变得非常规范而且避免代码冗余。让我们及时发现代码中隐藏的问题。
举个例子:我们在代码中建立全局变量,而这个变量实际并不需要全局便利,lint在检测之后会提示我们改成局部变量,这对内存优化是一个很强大的促进手段。
如何使用:
这里写图片描述
可以看到有Inspect Code,翻译就是检测代码
这里写图片描述点击选择whole project(整个项目)即可。
除此之外还有:FindBugs、FireLine.
5. TraceView
TraveView是Android studio集成的一个性能优化工具,相信很多人都知道它,但是用到它的应该不多,它的使用比较复杂,应该说理解比较复杂。它主要计算工程内方法运行所占用的时间,调用次数,以此来优化App运行效率。
例如:一个方法,占用时间比较长,但是调用次数少,那么你就要检测这个方法耗时在什么地方,由什么原因导致?
6.Hierarchy Viewer
hierarchyviewer:检测布局复杂度
打开Hierarchy Viewer
启动Android Device Monitor成功之后,在新的的窗口中点击切换视图图标,选择Hierarchy Viewer,如下图:
7. 内存泄漏MAT
具体使用:MAT使用攻略