准备工作
已按照Android SDK接入接入了内存分析。
产品功能
1 添加自定义维度数据(可选)
内存分析SDK提供了一系列设置键/值对的API,方便给内存分析日志添加更多额外信息,请根据需要使用。
import com.aliyun.emas.apm.mem.monitor.ApmMemMonitor
ApmMemMonitor.getInstance().setCustomKey(key, value)
import com.aliyun.emas.apm.mem.monitor.ApmMemMonitor;
ApmMemMonitor.getInstance().setCustomKey(key, value);
详细API请查看添加自定义维度。
2 主动触发内存分析(可选)
内存分析SDK内部有一些策略去判断触发内存分析的时机,如果您需要根据自身的业务特性去主动触发内存分析,可以调用触发内存分析的API。
重要
每次App生命周期内,最多仅会触发一次内存分析,如果一次生命周期内已经触发过内存分析,调用主动触发内存分析API也不会真正的去做内存分析。
import com.aliyun.emas.apm.mem.monitor.ApmMemMonitor
ApmMemMonitor.getInstance().triggerMemAnalysis()
import com.aliyun.emas.apm.mem.monitor.ApmMemMonitor;
ApmMemMonitor.getInstance().triggerMemAnalysis();
功能验证
1 接入验证
过滤tag:Apm-MemMonitor
,查看内存分析是否初始化,下面列出关键日志。
I Initializing MemMonitor blocked main for 3 ms
2 构造内存泄漏场景
class LeakActivity: AppCompatActivity () {
companion object {
var activity: Activity? = null
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
activity = this
finish()
}
}
public class LeakActivity extends AppCompatActivity {
static Activity activity;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
activity = this;
finish();
}
}
说明
请注意需要在您的AndroidManifest.xml里注册LeakActivity。
3 主动触发内存分析
内存分析SDK内部有一些策略去判断触发内存分析的时机,为了快速验证功能,可以主动触发内存分析。
import com.aliyun.emas.apm.mem.monitor.ApmMemMonitor
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val memButton = Button(this)
memButton.setText("Test memory analysis")
memButton.setOnClickListener(object : View.OnClickListener {
override fun onClick(view: View?) {
//触发内存分析
ApmMemMonitor.getInstance().triggerMemAnalysis()
}
})
addContentView(
memButton, ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT
)
)
}
import com.aliyun.emas.apm.mem.monitor.ApmMemMonitor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Button memButton = new Button(this);
memButton.setText("Test memory analysis");
memButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
//触发内存分析
ApmMemMonitor.getInstance().triggerMemAnalysis();
}
});
addContentView(memButton, new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
}
4 查看日志
过滤tag:Apm tag:Apm-MemMonitor
,查看内存分析是否初始化,下面列出关键日志。
# 成功触发内存分析
I track mem problem, reason=manual trigger mem analysis
# 开始内存分析
D start analysis heap for session=7d08b9cc14054faaaef8f7f81f03122b
I heap analyze step: Extracting metadata
I heap analyze step: Finding retained objects
I heap analyze step: Finding paths to retained objects
I heap analyze step: Finding dominators
I heap analyze step: Inspecting objects
I heap analyze step: Computing native retained size
I heap analyze step: Computing retained size
I heap analyze step: Building leak traces
# 分析结果
D find 1 leaks
D find 0 large objects
# 上报结果
D report data success. eventId=mem_leak, sessionId=7d08b9cc14054faaaef8f7f81f03122b
5 控制台查看数据
该文章对您有帮助吗?