Android

弹出PopupWindow后让背景变暗的方法

  在Android上使用AlertDialog和PopupWindow都可以很方便的实现弹窗,AlertDialog弹出后背景会变暗,而PopupWindow不具有此特性。StackOVerflow上的这个问题里给出了三种方法以实现弹出PopupWindow后让背景变暗的效果,整理如下。 1. 方法一   使用WindowManager.LayoutParams.FLAG_DIM_BEHIND可…
Read more

为FloatingActionButton添加滑动隐藏和显示的行为

  位于列表上的FloatingActionButton有时会挡住列表的内容,可以通过为FloatingActionButton添加自定义layout_behavior的方式,在向下滚动列表时隐藏FloatingActionButton,向上滚动列表时显示FloatingActionButton,如图1所示。 0. 布局   这里使用的布局如下,在CoordinatorLayout中放置了Recy…
Read more

Android Performance: Allocation Tracker

  从Memory Monitor和Heap Viewer并不能看出占用内存的对象和分配内存在代码中发生的位置,为了进一步定位内存分配,需要使用Allocation Tracker。Allocation Tracker可以记录应用的内存分配,并列出所有分配的对象和调用栈。   下面例子使用的代码可以在这里找到,运行后点击“MEMORY CHURN”,如图1所示。 点击“DO INTERESTING…
Read more

Android Performance: Memory Monitor & Heap Viewer

Memory Monitor可以监视应用的内存使用,并以可视化的方式显示出来。Heap Viewer可以实时地报告应用在内存中分配的对象的类型、数量和在堆上占用的空间。二者都是分析应用内存分配和管理的工具,能够帮助定位内存泄漏等问题。   下面例子使用的代码可以在这里找到,运行后点击“MEMORY LEAKS”,如图1所示。 1. Memory Monitor   在Android Studio中…
Read more

Android Performance: Traceview

  Traceview可以记录方法运行的数据,如运行时间、调用次数等,帮助定位代码中的性能问题。   下面使用的代码可以在这里找到,运行后点击“BATCHING AND CACHING”,如图1所示,点击“COMPUTE SOME FIBONACCI NUMBERS”会开始计算一段斐波那契数列。   在Android Studio中打开Android Device Monitor,在右上角选择DD…
Read more

Android Performance: Nested Hierarchies

  如果View进行了过多的嵌套,具有较深的层级关系,也会影响性能。下面例子使用Hierarchy Viewer比较了不同层级对性能的影响,Hierarchy Viewer能够可视化地显示布局中View的层级关系,用来对UI进行Debug和优化。代码可以在这里找到,运行后点击“COMPARE LAYOUTS”按钮,界面如图1所示。 其中包含了两个看似完全一样的布局,具体定义在activity_co…
Read more

Android Performance: clipRect和quickReject

  Android Framework会通过裁剪(Clipping)的方式避免重绘不可见的元素,以此来优化性能。但这一优化对于一些复杂的自定义View无效,如果自定义View重写了onDraw(),系统无法知道View中各个元素的位置和层级关系,也就无法自动省略绘制不可见的元素。Canvas提供了一些特殊的方法,可以用来向Android Framework告知Canvas的哪些部分不可见、不需要绘…
Read more