android监控io产生的应用,Android 性能监控框架 Matrix(0)介绍

介绍

Matrix 是腾讯微信终端团队开发的一套应用性能监控系统(APM),GitHub 地址: Tencent - Matrix。

Matrix-android 当前监控范围包括:应用安装包大小、帧率变化、启动耗时、卡顿、慢方法、SQLite 操作优化、文件读写、内存泄漏等。整个库主要由 5 个组件构成:

APK Checker。针对 APK 安装包的分析检测工具,根据一系列设定好的规则,检测 APK 是否存在特定的问题,并输出较为详细的检测结果报告,用于分析排查问题以及版本追踪

Resource Canary。基于 WeakReference 的特性和 Square Haha 库开发的 Activity 泄漏和 Bitmap 重复创建检测工具

Trace Canary。监控界面流畅性、启动耗时、页面切换耗时、慢函数及卡顿等问题

IO Canary。检测文件 IO 问题,包括文件 IO 监控和 Closeable Leak 监控

SQLite Lint。按官方最佳实践自动化检测 SQLite 语句的使用质量

使用

Matrix 的使用方式很简单,在 Application 中初始化后启动即可:

Matrix.Builder builder = new Matrix.Builder(this);

// 添加需要的插件

builder.plugin(new TracePlugin(...));

builder.plugin(new ResourcePlugin(...));

builder.plugin(new IOCanaryPlugin(...));

builder.plugin(new SQLiteLintPlugin(...));

// 初始化

Matrix matrix = Matrix.init(builder.build());

// 启动

matrix.startAllPlugins();

复制代码

Matrix 类相当于整个库的统一对外接口,资源监控、IO 监控、卡顿监控等功能实现是由其它具体的 Plugin 完成的。

也可以不在 Application 中启动全部插件,而是在某个场景中启动特定的插件,比如:

public class TestTraceMainActivity extends Activity {

@Override

protected void onCreate(@Nullable Bundle savedInstanceState) {

// 启动插件

Plugin plugin = Matrix.with().getPluginByClass(TracePlugin.class);

if (!plugin.isPluginStarted()) {

plugin.start();

}

}

@Override

protected void onDestroy() {

super.onDestroy();

// 停止插件

Plugin plugin = Matrix.with().getPluginByClass(TracePlugin.class);

if (plugin.isPluginStarted()) {

plugin.stop();

}

}

}

复制代码

每个具体的 Plugin 都会实现 IPlugin 接口:

public interface IPlugin {

Application getApplication();

void init(Application application, PluginListener pluginListener);

void start();

void stop();

void destroy();

String getTag();

// 在应用可见/不可见时回调

void onForeground(boolean isForeground);

}

复制代码

可以通过 PluginListener 监听 Plugin 的生命周期变化,或在 Plugin 上报问题时回调:

public interface PluginListener {

void onInit(Plugin plugin);

void onStart(Plugin plugin);

void onStop(Plugin plugin);

void onDestroy(Plugin plugin);

void onReportIssue(Issue issue);

}

复制代码

上报的问题使用实体类 Issue 包装,Issue 包含 tag、type 等通用字段,详细信息可以通过 JSON 对象 content 获取:

public class Issue {

private int type;

private String tag;

private String key;

private JSONObject content;

private Plugin plugin;

}

复制代码

源码简析

Matrix

Matrix 是一个单例类,在构造函数执行时,Matrix 内部的所有 Plugin 都会被初始化:

public class Matrix {

private final HashSet plugins;

private Matrix(Application app, PluginListener listener, HashSet plugins) {

this.plugins = plugins;

AppActiveMatrixDelegate.INSTANCE.init(application); // 下面会分析

// 初始化所有 Plugin,并回调 pluginListener

for (Plugin plugin : plugins) {

plugin.init(application, pluginListener);

pluginListener.onInit(plugin);

}

}

}

复制代码

Plugin

Plugin 是一个抽象类,每次执行 init / start / stop / destroy 等方法时都会更新状态,并回调 PluginListener:

public abstract class Plugin implements IPlugin, IssuePublisher.OnIssueDetectListener, IAppForeground {

private int status = PLUGIN_CREATE;

@Override

public void init(Application app, PluginListener listener) {

status = PLUGIN_INITED;

AppActiveMatrixDelegate.INSTANCE.addListener(this); // 下面会分析

}

@Override

public void start() {

status = PLUGIN_STARTED;

pluginListener.onStart(this);

}

...

}

复制代码

如果某个具体 Plugin 上报了一个问题,父类 Plugin 还会对该 Issue 填充 tag、type、process、time 等通用字段,并回调 PluginListener 的 onReportIssue 方法:

@Override

public void onDetectIssue(Issue issue) {

issue.setPlugin(this);

JSONObject content = issue.getContent();

// 拼接 tag、type、process、time 等通用字段

content.put(Issue.ISSUE_REPORT_TAG, issue.getTag());

content.put(Issue.ISSUE_REPORT_TYPE, issue.getType());

content.put(Issue.ISSUE_REPORT_PROCESS, MatrixUtil.getProcessName(application));

content.put(Issue.ISSUE_REPORT_TIME, System.currentTimeMillis());

// 回调

pluginListener.onReportIssue(issue);

}

复制代码

AppActiveMatrixDelegate

Matrix 和 Plugin 都监听了 AppActiveMatrixDelegate,它的主要作用是在应用可见/不可见时通知观察者:

public enum AppActiveMatrixDelegate {

INSTANCE; // 单例

// 观察者列表

private final Set listeners = new HashSet();

// 应用可见时通知观察者

private void onDispatchForeground(String visibleScene) {

handler.post(() -> {

isAppForeground = true;

synchronized (listeners) {

for (IAppForeground listener : listeners) {

listener.onForeground(true);

}

}

});

}

// 应用不可见时通知观察者,逻辑和上面的一样

private void onDispatchBackground(String visibleScene) {

...

}

}

复制代码

判断应用是否可见的逻辑是通过 ActivityLifecycleCallbacks 接口实现的:

private final class Controller implements Application.ActivityLifecycleCallbacks, ComponentCallbacks2 {

@Override

public void onActivityStarted(Activity activity) {

// 应用可见

updateScene(activity);

onDispatchForeground(getVisibleScene());

}

@Override

public void onActivityStopped(Activity activity) {

// 没有可见的 Activity 了,相当于进入了后台

if (getTopActivityName() == null) {

onDispatchBackground(getVisibleScene());

}

}

...

@Override

public void onTrimMemory(int level) {

// 应用 UI 不可见

if (level == TRIM_MEMORY_UI_HIDDEN && isAppForeground) { // fallback

onDispatchBackground(visibleScene);

}

}

}

复制代码

总结

Matrix-android 主要包含 5 个组件:APK Checker、Resource Canary、Trace Canary、IO Canary、SQLite Lint。其中 APK Checker 独立运行;其它 4 个模块需要在 Application 中,通过统一对外接口 Matrix 配置完成后执行。每一个模块相当于一个 Plugin,在执行初始化、启动、停止、销毁、报告问题等操作时,都会回调 PluginListener,并更新状态。

每一个 Issue 都有 tag、type、process、time 等 4 个通用字段。

可以监听 AppActiveMatrixDelegate,在应用可见/不可见时,回调 onForeground 方法,以执行相应的操作。应用可见指的是存在可见的 Activity,应用不可见指的是没有可见的 Activity,或者内存不足了,应用的 UI 不可见。

b739ec46bb5c46d9c0aa4ce35ba1ea56.png

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[Android 性能监控框架 Matrix(0)介绍]http://www.zyiz.net/tech/detail-144961.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Native IO性能监控主要是指对Android应用程序在本地进行IO操作的性能监控和分析。在Android开发中,IO操作是指应用程序与外部存储器、网络、数据库等进行数据交互、读取和写入的过程。对于应用程序的性能优化和问题排查,IO性能监控是一个重要的工具。 要实现Android Native IO性能监控,可以通过以下几种方式: 1. 文件操作监控Android提供了File类用于文件操作,通过监控文件的读取和写入的速度、文件打开和关闭的时间等指标,可以评估应用程序的IO性能情况。 2. 网络IO监控:通过监控网络请求的发送和响应时间、网络字节流的传输速度等指标,可以评估应用程序的网络IO性能情况。 3. 数据库IO监控:通过监控数据库的读取和写入操作的时间、数据库连接的建立和释放等指标,可以评估应用程序的数据库IO性能情况。 4. 响应时间监控:可以使用性能监控工具,如Android Profiler等,监控应用程序在IO操作过程中的响应时间、CPU和内存占用情况等指标,以便及时发现IO性能问题并进行优化。 在进行IO性能监控时,可以采用一些常用的性能分析工具,如Systrace、Perfetto等,这些工具可以提供详细的IO性能指标和图形化的性能分析结果,帮助开发者定位IO性能瓶颈和优化方向。 通过对Android Native IO性能监控和分析,开发者可以及时发现和解决应用程序在IO操作中的性能问题,提升应用程序的性能和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值