
android
litefish
never stop,never give up
展开
-
android全屏对话框,覆盖状态栏 尝试了多种方法 效果都不好
public class FullScrreenDialog extends Dialog { public FullScrreenDialog(Context context, List<FuncGridItem> shareList) { //super(context,R.style.Dialog_FullScreen); super(context); } @Override protected void onCreat原创 2021-06-23 17:45:05 · 1406 阅读 · 2 评论 -
android常用adb命令
查看activity1、查看栈顶activity的名字adb shell dumpsys activity | grep "mFocusedActivity"结果如下mFocusedActivity: ActivityRecord{bcab688 u0 com.youkuchild.android/.videohome.ChildAudioHomeActivity t57193}这个...原创 2020-03-08 11:26:35 · 239 阅读 · 0 评论 -
多线程安全
这里写自定义目录标题容器容器list使用CopyOnWriteArrayList,不使用vector或者arraylist。arraylist不支持同步。vector存在ConcurrentModificationException的问题原创 2019-12-16 17:32:44 · 141 阅读 · 0 评论 -
aac架构学习-android-lifecycles代码解析
前言本文将通过lifecycle代码的阅读理解,来学习aac架构。代码地址 https://github.com/googlecodelabs/android-lifecycles.git代码里的activity继承自 AppCompatActivity,而AppCompatActivity继承自FragmentActivity,这个FragmentActivity和我们以前见到的地址可不一...原创 2019-03-24 23:55:35 · 364 阅读 · 0 评论 -
Intent
Intent是Android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。Intent一般可被用于启动活动、启动服务、以及发送广播等场景原创 2015-05-06 09:51:08 · 671 阅读 · 0 评论 -
检测ScrollView开始停止滑动的方案
检测ScrollView开始停止滑动的方案旧方案如何检测scrollview的滑动开始和滑动停止,滑动开始可以用 onScrollChange来判断,那么停止呢。 一开始的时候我是判断200ms内,scrollY是否改变,如果未改变就判断为停止了,核心代码如下。工程名为DetectScrollStop。但是这样不优雅,有没有更好的方法呢? detector = new Scroll原创 2017-08-17 15:05:21 · 5639 阅读 · 4 评论 -
自定义属性--你真的了解match_parent吗
问题我们都知道在xml写 android:layout_width 的时候,内容可以是类似100px,100dp,wrap_content,match_parent这几种类型,前面2种是dimension类型,后面2种是enum类型,我们可以翻看下android源码的attr可以找到如下代码.从下边的注释可以看出,layout_width必定是一个dimension信息或者特定常数信息。在layou原创 2017-07-15 11:12:35 · 4692 阅读 · 0 评论 -
一次抓包定位问题的经历
作为一个android开发,经常要抓包定位问题,主要用到的工具有fiddles,charles,wireshark,像http、https的抓包用前2者比较方便,但是底层的包就必须用tcpdump+wireshark了,今天学习了wireshark抓包,在此小记。准备工作tcpdump的主要功能就是把网络日志记录在一个pcap文件内,在android上要用tcpdump,首先必须是root的手机,然原创 2017-07-06 21:16:10 · 11899 阅读 · 4 评论 -
android事件分发
事件分发在Android中非常重要,在滑动冲突,下拉刷新,嵌套滑动的时候都需要非常清楚事件分发的机制,才能写好对应的处理代码。曾经以为我对事件分发已经很清楚了,也写过几篇代码,但是总感觉没有完全说清楚,今天再从代码的角度分析一遍事件分发机制,希望以后遇到所有事件分发的问题,都能在这里找到答案。 先看几个问题,如果这些问题你都知道答案,那本篇文章就不用看了。问题1、如果拦截了某个事件,是否就会交由本原创 2016-08-08 20:46:35 · 1473 阅读 · 0 评论 -
解决SimpleDateFormat的线程不安全问题的方法:ThreadLocal
http://bijian1013.iteye.com/blog/1873336http://blog.youkuaiyun.com/vking_wang/article/details/14225379原创 2015-05-28 11:40:51 · 4042 阅读 · 5 评论 -
从源码看invalidate和requestLayout的区别
从源码看invalidate和requestLayout的区别invalidate和requestLayout经常被用来刷新界面,有的时候2个一起用,TextView的源码里也经常看到2者一起用的情况。什么时候该用哪个呢?为什么有的时候2个要一起用呢?本文所从源码是6.0.1来研究下2者的原理和区别以及如何使用。测试工程InvalidateDemoInvalidatePFLAG_DRAWING_CA原创 2016-10-19 14:46:14 · 14181 阅读 · 9 评论 -
浅谈WindowInsets的分发
浅谈WindowInsets的分发在fitsSystemWindows对CoordinatorLayout的影响曾经说过fitSystemWindow的作用。今天再来仔细梳理一下。 ViewRootImpl在performTraversals时会调dispatchApplyInsets,内调DecorView的dispatchApplyWindowInsets,进行WindowInsets的分发。原创 2016-11-20 15:17:00 · 10126 阅读 · 6 评论 -
requestLayout调用onDraw之谜
在上篇文章曾经说过,requestLayout如果没有改变l,t,r,b,那就不会触发onDraw,但是我今天写了个demo,发现居然触发了onDraw,这是怎么回事? 代码很简单,工程为RequestLayoutDemo<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.原创 2016-09-27 16:50:59 · 5156 阅读 · 9 评论 -
检测requestlayout in layout问题
前言相信大家也遇到过类似的问题,比如TextView文字显示不全,view没有按期望的显示或者隐藏,页面没有按期望的刷新,而且这些bug都在4.3以下必现,4.3以上系统就没问题了。这往往是requestLayout in layout问题,这类问题往往都需要花比较久的时间来定位解决,我最近碰到了几次,感觉特别浪费时间,很难找到问题的关键代码,所以准备写一个工具来解决检测这种问题,打印出问题代码的堆原创 2017-12-16 19:01:23 · 733 阅读 · 0 评论 -
android事件分发(一)
事件分发在android中非常重要,写了3篇文章总结其中的故事android事件分发(一)android事件分发(二)源码源码android事件分发(三)重要的函数requestDisallowInterceptTouchEvent概述1、在父控件的onTouch里返回true,子控件就无法收到点击事件,对吗? 这是错误的,阻止事件往下分发得用onInterceptTouchEvent2、事件传递原创 2015-06-11 22:31:46 · 1151 阅读 · 0 评论 -
android历史版本
API等级1:Android 1.0API等级2:Android 1.1 Petit FourAPI等级3:Android 1.5 CupcakeAPI等级4:Android 1.6 DonutAPI等级5:Android 2.0 ÉclairAPI等级6:Android 2.0.1 ÉclairAPI等级7:Android 2.1 ÉclairAPI等级8:Android 2.2 ...原创 2019-09-25 15:37:26 · 259 阅读 · 0 评论 -
android 常用logcat命令
adb logcat 一般用法是 [adb] logcat [<option>] ... [<filter-spec>] ...选项说明-c清空缓冲区-e , --regex=只输出日志消息与 匹配的行,其中 是一个正则表达式-f 将日志消息输出写入 。默认值为 stdout-s根据tag过滤,相当于过滤器规范 ...原创 2019-09-07 23:20:48 · 446 阅读 · 0 评论 -
ROOM新手入门
room框架是google出品打orm框架,闻名已久,今日入门学习1、先写数据实体类,这个实体对应数据库中的一张表@Entitypublic class User { @PrimaryKey private int uid; @ColumnInfo(name = "first_name") private String firstName; @Co...原创 2019-09-06 23:50:58 · 335 阅读 · 0 评论 -
databinding学习
主要内容来自 https://www.jianshu.com/p/bd9016418af2DataBinding 是谷歌官方发布的一个框架,顾名思义即为数据绑定,是 MVVM 模式在 Android 上的一种实现,用于降低布局和逻辑的耦合性,使代码逻辑更加清晰。MVVM 相对于 MVP,其实就是将 Presenter 层替换成了 ViewModel 层。DataBinding 能够省去我们一直以...转载 2019-08-24 22:41:31 · 140 阅读 · 0 评论 -
安卓帧渲染数据获取方式小结
文章目录通过 onDraw() 获取帧数据首先解释一下文章标题中的“帧渲染数据”。“帧渲染数据”是指,完成渲染一帧的耗时。这是计算...转载 2019-08-07 21:39:57 · 1443 阅读 · 0 评论 -
Activity的创建流程
Activity的创建流程如下所示:获取LoadedApk对象。创建Activity对象。创建Application对象。创建ContextImpl对象。执行Activity的onCreate()回调方法。public final class ActivityThread { private Activity performLaunchActivity(Activit...转载 2019-07-15 00:18:47 · 1601 阅读 · 0 评论 -
去掉启动页和首页的转场动画
Intent intent = new Intent(getActivity(),SearchListActivity.class);startActivity(intent);getActivity().overridePendingTransition(0, 0);@Overrideprotected void onPause() { overridePendingTransiti...原创 2019-06-24 16:08:01 · 407 阅读 · 0 评论 -
activity的oncreate里面start另一个activity
第一个activity的oncreate和onresume都会走HOncreateHOnResumeHonPauseGOncreate原创 2019-06-22 11:18:14 · 905 阅读 · 0 评论 -
git撤销操作
已commit未push如何撤销?撤销到上一个版本git reset --hard HEAD^原创 2019-06-18 09:49:34 · 867 阅读 · 0 评论 -
庖丁解牛之ScrollView
庖丁解牛之ScrollView前言ScrollView可以说是android里最简单的滑动控件,但是其中也蕴含了很多的知识点。今天尝试通过ScrollView的源码来了解ScrollView内部的细节。本文在介绍ScrollView时会忽略以下内容:嵌套滑动,崩溃保存,Accessibility。 ScrollView是一种控件,继承自 FrameLayout,他的子控件远远大于ScrollVie原创 2016-08-05 12:35:36 · 15184 阅读 · 4 评论 -
class小技巧
asSubClass可以把Class类型转化为一个泛型的<? extend XXX>类型,并且做类型校验。 public <U> Class<? extends U> asSubclass(Class<U> clazz) { if (clazz.isAssignableFrom(this)) retu...原创 2019-06-16 22:26:29 · 412 阅读 · 0 评论 -
MAT打开出错
https://yq.aliyun.com/articles/642590补充下1、把mat放入application里2、添加数据信息-data/Users/fish/mat-log原创 2018-12-11 11:03:15 · 2056 阅读 · 0 评论 -
AppCompatActivity的View树
根据activity的style是否有actionbar会有所区别,对应工程ViewTree1有actionbar的style(ActionbarActivity) <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. -->原创 2016-09-22 00:58:33 · 1041 阅读 · 0 评论 -
clipToPadding和clipChildren
clipToPadding解决listview滚动问题这部分参考http://blog.youkuaiyun.com/hpu_zyh/article/details/44520949有时候需要在listview里设置一个padding值,布局如下所示<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns原创 2016-09-08 14:35:33 · 19228 阅读 · 2 评论 -
genymotion的坑
注意不同的android版本的arm-translation不一样的,https://github.com/m9rco/Genymotion_ARM_Translation主要按http://hao.jser.com/archive/5393/这篇文章安装下载,这里第二部安装Genymotion插件有问题,改成下面这样就可以了Genymotion已经安装完毕了,接下里我们要...原创 2016-06-23 14:39:11 · 2320 阅读 · 0 评论 -
viewstub应用
前言我们经常遇到某些view或viewgroup,在一定的条件下才显示,显示的频率比较低,但是view或者viewgroup又比较复杂,比如viewgroup有很多的子view,用普通的VISIABLE,GONE的方法,我们大约需要以下几步操作1. 把view写到layout内,inflate的时候inflate所有view2. findview,找到有可能用到的各个vie原创 2015-10-12 23:21:36 · 627 阅读 · 0 评论 -
动态改变代码布局
为了满足某些奇葩的需求,我们可以动态改变代码布局,写个demo:DynamicChangeLayout主要代码如下 Button btn; TextView textView; boolean matchParent = true; @Override protected void onCreate(Bundle savedInstanceState原创 2015-09-14 18:46:12 · 751 阅读 · 0 评论 -
adb shell am局限性
使用adb启动activity可以用如下方法:adb shell amstart -n / package_name为包名,activity_class_name为类名,举例子如下am start -ncom.example.fish.test/com.recycling.imageview.SingleImageViewActivity 但是这个方法有局限性,只能启动入口原创 2015-07-09 15:14:45 · 1945 阅读 · 2 评论 -
高级字符串用法
这是strings.xml里面的代码,如下Welcome %s! Your inbox is completely empty! You one message in your inbox! You two messages waiting to be read! You have %d messages waiting! %1$d messages in your inbox!原创 2015-07-09 16:30:45 · 716 阅读 · 0 评论 -
android的Killprocess
Process的方法killProcess(int pid)Kill the process with the given PID.Kill the process with the given PID. Note that, though this API allows us to request to kill any process based on原创 2015-05-31 13:50:58 · 706 阅读 · 0 评论 -
R文件
每个android工程都会有个gen目录,这个目录里的内容都是自动生成的,主要有一个R.java文件,你在项目中添加的任何资源都会在其中生成一个相应的资源id,是一个int值。这个文件永远不要手动去修改它。原创 2015-05-06 09:48:44 · 694 阅读 · 0 评论 -
Fragment实现tab页效果
郭神代码在此http://blog.youkuaiyun.com/guolin_blog/article/details/13171191,我做个简单总结效果图如下上述界面主要分为上下2个部分,上部分是个FrameLayout,用来放主要内容。下部分是个LinearLayout,放4个标签。下面标签点击会导致上面的内容改变。xml代码如下<LinearLayout原创 2015-05-06 14:43:12 · 624 阅读 · 0 评论 -
wifi ap状态
android不同版本,ap_state值不一样android2.3版本 private static final int WIFI_AP_STATE_UNKNOWN = -1; private static final int WIFI_AP_STATE_DISABLING = 0; private static final int WIFI_AP_STATE_DIS原创 2015-03-03 21:00:32 · 2535 阅读 · 0 评论 -
android进程优先级,内存不足时杀进程顺序
概述Android操作系统尝试尽可能长时间的保持应用的进程,但当可用内存很低时最终要移走一部分进程。怎样确定那些程序可以运行,那些要被销毁,Android让每一个进程在一个重要级的基础上运行,重要级低的进程最有可能被淘汰,一共有5级,下面这个列表就是按照重要性排列的:1 一个前台进程显示的是用户此时需要处理和显示的。下列的条件有任何一个成立,这个进程都被认为是在前台运行的。原创 2015-03-29 10:45:02 · 3507 阅读 · 0 评论 -
Handler与looper与Thread
看了http://wenku.baidu.com/view/b7fa25607e21af45b307a8c0.html?re=view,总结一下使用myThreadHandler.sendEmptyMessage(0);发送一个message对象,那么Handler是如何接收该message对象并处理的呢?调用sendEmptyMessage后,会把 Mes原创 2015-03-29 22:21:43 · 664 阅读 · 0 评论