android
文章平均质量分 75
PK0071
这个作者很懒,什么都没留下…
展开
-
那你讲一下怎么使用模板模式重构代码的
听说你熟悉设计模式?你是怎么用模板模式重构的?模板模式定义先放一下模板模式的定义。一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。可能你看完是这样的别慌,让我来解释一下。用我自己的话来说就是,父类抽象类定义了具体的执行流程,其中某个或者多个是asbtrast抽象方法,让子类自己去重写达到具体不同的逻辑。上代码这是我之前一个项目里面模板模式的一个应用,当时用来重构代码时复用原创 2021-06-10 11:44:16 · 205 阅读 · 0 评论 -
那你讲一下IntentService
之前面BAT时被问过两三次的问题,为什么喜欢问这个?因为这里能延伸出去很多问题,想答好并不简单。首先会问IntentService跟Service有什么区别?Service运行在主线程中,直接使用做耗时任务会卡主线程,从而导致ANR。Service ANR的时间为前台Service20秒,后台Service200秒。而IntentService会开启子线程,重写onHandleIntent方法中处理逻辑即可,不会引发ANR。如果高级岗位只回答到这里,那么结果大概率是接着应该要回答原创 2021-06-04 00:13:32 · 342 阅读 · 0 评论 -
那你讲一下LeakCanary的原理
今天来写一波内存泄漏工具LeakCanary的分析,也整理一下之前的笔记,废话不多说,源码整起来。我用的1.5.1版本。LeakCanary核心源码解析看源码还是那句话,先找入口,顺着入口看主流程。LeakCanary监听Activity的onDestory方法,然后介入,所以从这里开始发现入口在RefWatcher.watch方法里,这个RefWatcher是核心类,跟进去watch方法。可以看出这里开始搞事情了,先解释一下这些变量的意义这样就可以解释,上图wa原创 2021-05-21 15:32:57 · 294 阅读 · 0 评论 -
Android中序列化的Parcelable与Serializable区别及其AS插件
在我们网络传输或者本地持久化的时候,和intent传递对象时,都是需要将对象序列化的。Serializable是java的序列化接口Parcelable是android提供的序列化接口不用想都知道它们肯定有区别,不然谁没事给你弄两个一样的东西。因为写的android就用intent传值来做栗子一.Serializable一般实现public clas原创 2016-07-29 15:30:28 · 897 阅读 · 0 评论 -
自定义View:通用的下拉刷新
我们知道ListView是可以addHeadView和addFooterView的,其他的RecyclerView 和scrollView等是不能添加的,如果为每个都单独写又太麻烦了,所以一般自定义ViewGroup来做一个通用刷新的控件。网上有BAGRefresh这类通用的刷新,看了写的东西比较多,所以我按照自己想法写了一个简单的demo说明一下原理。老规矩先来张图,背景图是受到一个国外ap原创 2016-08-06 16:33:49 · 663 阅读 · 0 评论 -
Android中开发IM即时通讯功能的方案
最近准备做IM功能,在技术预研当中,其实可行方案还是比较多的,就看怎么选了1.第三方平台比如环信,融云,leancloud,容联云等等。直接使用sdk就可以实现了,最简单最直接,而且稳定性已经不错了,连UI界面都带有了,可以自行修改,缺点是要收费,比如环信日活跃30万以上开始收费,融云VIP级别的功能要收费。如果让我选应该会在环信和融云之间选,环信的话一个是市场占有率比较大,二个是技术客服原创 2016-08-03 17:37:34 · 10523 阅读 · 0 评论 -
AsynTask版本兼容问题
AsynTask本质其实是对线程池+Handler的封装,知道本质你就知道为什么能执行任务,为什么能更新UI了。线程池这块使用了ThreadPoolExecutor由于AsynTask在以往版本中被频繁的修改过,所以导致了不同版本使用的时候会出现崩溃,或者执行延迟很严重等等问题.好那么带上疑问走进源码这是API23源码略过一百多行注释。。。上面标了两个线程池原创 2016-06-17 14:03:10 · 504 阅读 · 0 评论 -
谈谈自己关于阅读源码的一点鄙见
起因是这样的,最近一个工作两年同事,用其他同事写好的一些控件,网络库的时候,总是问别人怎么调用,有几种调用方法,不只是一次两次是每次都这样,一个简单封装Dialog的调用都要问别人怎么用传什么参数,什么类型的,我就跟他说自己点进去那个类看看不就清楚了吗?这个同事还比我高一届,我就有点奇怪了难到两年都是这么过来的,算了不多说了,可能这是他一直的习惯吧,不好评论什么,还是简单讲一下自己平时的做法吧,帮原创 2016-06-16 19:03:11 · 603 阅读 · 0 评论 -
Volley的ImageLoader加载图片错位处理方式
在ListView中使用Volley的ImageLoader加载图片会出现图片错位的问题错位问题我们都知道是复用convertView并且异步加载图片导致的。方法一:可以换成使用NetworkImageView去避免方法二:直接去重写getImageListener方法,使用url加个Tag就可以了下面直接看重写怎么做,直接去到Volley源码找一下哪里获取bitmap的原创 2016-06-30 21:24:04 · 2285 阅读 · 4 评论 -
自定义ViewPagerIndicator:100行代码实现两种可滑动指示器
按照惯例先上图,一种是三角形,一种是最常用的下划线实现思路,主要是在onPageScroll里面进行指示器滑动距离和父容器滑动距离的计算,然后进行滑动,滑动解决了其他就比较简单了。顶部就是自定义的ViewPagerIndicator,下面就是Fragment+FragmentPagerAdagter主MainActivity代码,就是常规的ViewPag原创 2016-06-12 18:49:38 · 996 阅读 · 0 评论 -
自定义view:经典的标题栏(组合控件)
最近要用到一个公用的标题栏,左中右包含有iamgeview和textview方便扩展,可以根据情况设置点击事件和隐藏或者显示,因为比较常用就放出来,先来个效果图,有需要的拿去基本就能用了原创 2016-05-24 11:29:25 · 915 阅读 · 0 评论 -
PullToRefreshListView addHeadView的正确姿势
PullToRefreshListView addHeadView正确姿势一.比如加一个imageView到顶部refreshListView = (PullToRefreshListView) layout.findViewById(R.id.refresh_listview);ListView mListView = refreshListView.getRefresh原创 2016-03-19 23:21:36 · 3685 阅读 · 0 评论