【转】Android进程内存简单排查
转载自:Android进程内存简单排查
前言
本文旨在仅用adb的命令快速排查内存问题
分析步骤
第一步:确认你的应用包名
本地有安装包时:aapt dump badging [yourapp.apk],你可以看到package: name=’com.xxx.xxxx’等信息及权限申请信息。
本地没有安装包,仅手机上安装时:adb shell pm list packages,查看已安装列表,肉眼识别可能是哪个。不想肉眼识别,可以启动对应app,然后执行:adb shell dumpsys window|findstr mCurrentFocus
第二步:确认你的应用当前有几个进程
adb shell “ps|grep com.xxx.xxxx”
也可以确定当前界面功能在哪个进程:
adb shell “dumpsys activity|grep com.xxx.xxxx”
在输出的堆栈中,找到mFocusedActivity部分的信息,底部进程列表会标记(top-activity)
当然adb shell “activity acitvities” 输出的信息中可以按照包名过滤,就能看到当前有哪些activity并且在哪个进程
第三步:查看指定进程的内存信息
adb shell dumpsys meminfo com.xxx.xxxx:xxxprocess
此处通过输出信息中的 Activities可以反复操作进出activity验证是否存在最浅显的Activity泄漏,通过对比Pss Total等的增长信息可以确定是否有其他内存泄漏。
第四步:进一步分析
adb shell
am dumpheap com.xxx.xxxx:xxxprocess /data/local/tmp/xxx.hprof
以上获取内存dump,然后取到pc本地
adb pull /data/local/tmp/xxx.hprof /pc本地目录/xxx.hprof
转换格式为ddms可识别
sdk目录/platform-tools/hprof-conv.exe /pc本地目录/xxx.hprof /pc本地目录/xxx-conv.hprof
拖动xxx-conv.hprof到mat就可以详细分析内存堆栈中的Activity对象及其他信息了
注:通过 am dumpheap 命令生成的文件可以直接被 Android Studio 打开
RecyclerView 设置item之间的间距
Date & Time组件
ViewPager 相关文章
Android网络状态变化监听
FragmentTransaction与addToBackStack与popBackStack
节选自:FragmentTransaction与addToBackStack与popBackStack
addToBackStack其实针对的是fragmentTransaction。而非是具体的fragment。
关于Fragment的一些使用心得-跳转和返回栈实战浅析
节选自:关于Fragment的一些使用心得-跳转和返回栈实战浅析
先说fragment之间的跳转吧!
我的项目中首先是一个activity,在该活动中添加了一个fragmentA,然后需要从fragmentA跳转到fragmentB,那么我的实现方法如下:
// 设置标题右侧文字及单击事件监听 activity.setTitleRight("添加", new View.OnClickListener() { @Override public void onClick(View v) { AddPlanFragment fragment = new AddPlanFragment();// 创建AddPlanFragment对象 showFragment(PlanListFragment.this, fragment);// 跳转添加计划界面 } });
/** * 碎片之间的跳转 * * @param fragment_current 当前fragment * @param fragment_next 跳转后显示的fragment */ private void showFragment(Fragment fragment_current, Fragment fragment_next) { // 获取FragmentTransaction对象 FragmentTransaction transaction = ((WorkPlanActivity) context) .getSupportFragmentManager().beginTransaction(); if (fragment_next.isAdded()) { // 如果fragment_next已经添加过了,那么直接隐藏fragment_current,显示fragment_next transaction .hide(fragment_current) .show(fragment_next) .addToBackStack(null)// 加入返回栈,点击回退键会返回上一个fragment .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)// 设置转换动画 .commitAllowingStateLoss();// 提交事务 } else { // 如果fragment_next还没有添加,那么用add方法添加该碎片 transaction .hide(fragment_current)// 隐藏fragment_current .add(R.id.frameLayout_workPlan, fragment_next) .addToBackStack(null) .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) .commitAllowingStateLoss(); } }
上面的代码简单来说就是fragmentA中顶部右侧的标题添加单击事件监听,用以跳转到fragmentB。方法中我加了关键的注释,大家应该能理解。
- 虽说这是一个实现方法,但是难免嵌套多层fragment的时候会出现重影问题(有小概率会出现),我这里有几个比较好的链接给大家去参考参考,然后建议不要嵌套多层:
下面就来说说返回栈吧! 继续阅读关于Fragment的一些使用心得-跳转和返回栈实战浅析
这是一份面向Android开发者的复习指南
前言
相信很多同学都会有这样的感受,前三天刚刚复习的知识点,今天问的时候怎么就讲不出个所以然了呢?
本文的目的就是致力于帮助大家尽可能的建立Android知识体系,希望大家会喜欢~
考虑到上传完的脑图都被压缩过,高清脑图下载地址:
必读
知识结构
覆盖的知识点有Android、Java、Kotlin、Jvm、网络和设计模式。
面向人群
正在求职的中高级Android开发
食用指南
和大部分人一样,我在复习完第一遍Android知识的情况下,看到相关的知识回答的仍然不能够令自己满意。
在第二遍系统复习的时候,我着重记住每个知识点的关键字,根据这些关键字拼凑出大概的知识点,最后看到每个知识点的时候,就知道大概会问哪些内容,达到这种境界以后,你就可以从容的面对每次面试了。
简单的做法就是为每个知识点建立脑图,尽可能把自己想到的关键点罗列出来,也就是下面每个章节前面的脑图。
除此以外,我还为大家提供了可能会问到的面试题。
【转】NestedScrollView嵌套RecyclerView并且顶部嵌套其他view时 打开页面不会滑到顶部
转载自:NestedScrollView嵌套RecyclerView并且顶部嵌套其他view时 打开页面不会滑到顶部
//在NestedScrollView的第一的子布局中加入 android:focusable="true" android:focusableInTouchMode="true"