- 博客(17)
- 收藏
- 关注
原创 Android将私有目录下的文件拷贝至SD卡目录
private void copyApkAndFiles() { File destDir = new File(android.os.Environment.getExternalStorageDirectory().getAbsolutePath(), "Backup"); if (!destDir.exists()) { destDir.mkdirs();...
2019-06-27 14:12:13
1293
原创 写Interface的理由
1、使客户端面向接口编程,只暴露给客户端抽象的接口而隐藏内部具体的实现细节 -----开闭原则2、从多个类中抽象出公共的接口,让多个子类来继承,实现多态 -----里氏替换原则3、从类中抽出想要向外暴露的接口,使外部只有访问暴露接口的权限 -----最少知道原则、接口隔离 ...
2018-08-23 22:54:33
260
原创 View事件分发机制
1、从View上层来说,View的事件处理是从View#dispatchTouchEvent方法开始的。2、Android系统在处理事件前,需要找到能够处理事件的目标View。寻找方向有点像英文字母中的”U”,先下后上。顶层ViewGroup先接收到事件,然后依次向子View(也有可能是ViewGroup)传递,如果在这个向下过程中没有找到能够处理事件的View,就会再向相反的方向寻找能够处理...
2018-07-31 23:44:29
276
原创 一个for循环输出九九乘法口诀表
如题,用一个 for循环输出九九乘法口诀表。一般这种情况下,我们首先想到的会是用两个for循环来解决这样的问题。但是,实际上我们可以只需要使用一个for循环语句就可以做得到。下面给出具体的代码:for (int i = 1, j = 1; i 9; i++) { System.out.print(i + "*" + j + "=" + i * j); if (i ==
2017-07-31 21:35:03
4497
原创 一行代码搞定n!末尾所含0的个数
如题:给定一个正整数n,计算n!末尾所含0的个数。对于这个题目,相信有很多种解法。这里,给出自己所想到的一种解法:2*(n/10) + n%10>=5?1:0针对这行代码,稍微解释一下。其实,针对这个题目,可以这样理解一下:要求一个正整数末尾所含0的个数,实际上就是求该正整数因式分解后所含因子中10的个数,而10又可以更进一步地因式分解成2*5。所以,该问题实际上就是求n!
2017-07-31 21:04:58
786
3
原创 使用Canvas对应用图标的角标做缩放动画,具有呼吸效果
使用Canvas对应用图标的角标做缩放动画,具有呼吸效果,效果如下所示。Github源码地址: 点击打开链接
2017-07-17 22:26:23
1372
原创 高效率计算Fibonacci数列
Fibonacci的数列的通项公式是:F(0)=1,F(1)=1,F(n)=F(n-1)+F(n-2) (n>=2)。对于F(n)的求值,常见的做法是对进行递归运算。但是,随着输入规模n的增大,它的时间复杂度也会呈现指数级的增长,严重影响效率。其实,我们可以通过较小的存储来减少大量的重复计算,从而大大地提高运算效率。具体代码如下:public int fibonacci(int n
2017-07-11 23:14:02
465
原创 利用RecyclerView高仿小米联系人列表界面
利用RecyclerView高仿小米联系人列表界面,效果如下所示。Github地址: https://github.com/youngtze/ClassifiedRecyclerView.git
2017-07-05 23:51:37
666
原创 编写一个字符串(a~z)过滤函数,对于字形符串中出现的多个相同的字形符,将非首次出现的字符过滤掉
如题,编写一个字符串(a~z)过滤函数,对于字形符串中出现的多个相同的字符,将非首次出现的字符过滤掉。思路:因为输入的字符类型(a~z)数量有限,所以可以用一个布尔类型的数组来记录当前字符的出现情况(已经出现过或者还没有出现过)。具体实现如下:public class StringFilter { public static String stringFilter(String
2017-04-05 23:11:56
711
原创 使用Random工具类来解决等概率随机问题
在Android中提供了一个用来产生随机数的工具类Random,通过Random.nextInt(int n)方法就可以在区间[0,n)等概率地产生一个伪随机数。通过这个方法,我们可以有效地解决一些等概率随机类的问题。 问题一:等概率生成[1,100]的100个随机数。 思路:用一个数组int[] array = new int[100]来容纳这些数据,并依次初
2017-04-04 22:09:51
1378
原创 在应用的MainActivity中实现连续点击两次Back键后才退出应用
有些应用(如美团)为了避免用户因为误触Back键而导致退出应用程序,会在该应用的MainActivity对Back键事件进行自定义处理。具体现象是:当用户在MainActivity中第一次按下Back键时,会弹出一个Toast提示(如再按一次退出应用)。如果用户在预定义的时间内再次按下Back键,则认为用户是真想要退出应用,因此退出应用。如果用户没能在预定义的时间内再次按下Back键,则认为用户是
2017-03-29 22:59:12
609
原创 Android L及其以上版本中Launcher应用侦测应用状态变化的方式
Android L之前,Launcher应用侦测系统安装、卸载、更新应用的方式是通过监听Intent.ACTION_PACKAGE_XXX广播实现的。而Android L之后,系统提供了一个叫做LauncherApps的系统服务,通过将实现LauncherApps.Callback接口的类注册到这个服务,就可以实现系统在安装、卸载、更新应用的时候回调已注册类的接口来通知Launcher应用。与广播
2017-03-24 23:28:17
554
原创 通过AndroidStudio进行静态代码检查,去除unused代码后引起的问题
今天遇到桌面编辑小部件时,小部件的大小与调整框不一致的问题。因为之前的代码是没有出现此问题的,所以能够确定这个问题是有同事修改代码出的问题。于是,回退代码,定位到了出问题出现的那个提交点。而这个提交点的内容是某位同事通过AndroidStudio进行静态代码检查,删除unused代码,而且修改与删除的内容非常的多。看到这些心里还是感觉有点为难的。因此,只有通过比对代码与查看逻辑一起来解决这个问题了
2017-03-22 23:14:24
1924
原创 通过在MainActivity中拦截Back键来实现进程保活功能
今天在分析解决一个问题时,通过Log发现第三方应用脉脉在按Back键“退出”应用时,竟然会调用Launcher。当时看到后感到很奇怪,因为我们平时写应用时,根本就不会在应用中去写调用Launcher的代码,应用若想回到 Launcher,只需要直接按Home键及连续按Back键就可以了。难道这是脉脉的多此一举吗? 后来,通过adb shell dumpsys activity a
2017-03-21 23:08:59
582
原创 斗鱼应用(V2.4.6.1)安装在不同型号的机器上,所呈现的图标不一致的原因
今天遇到一个有趣的问题,通过应用中心下载斗鱼应用安装后在桌面所呈现的图标不一致。在一台机器上的图标是圆角矩形,四个边角都是透明的。而在另外一台机器上的图标是四方矩形,四个边角是不透明的白色。 通过adb shell wm size 与adb shell wm density 命令(其实通过这两个命令还可以设定手机的分辨率与屏幕像素密度)分别查看两台手机的分辨率与屏幕像素密度,发现
2017-03-17 23:49:10
632
原创 Handler作为Activity的内部类所引起的内存泄露问题
前天参加某公司的面试,被问到一个关于Handler作为Activity的内部类所引起的内存泄露的问题。虽然当时答上来了,但是还是想在这里记录一下。问题总共分为两问: 1、Handler作为Activity的内部类来使用,会导致什么问题。 第一问很容易答上来,非静态的内部类会持有外部类实例的引用。因此,当通过Handler.post(Runnable r)或者
2017-03-13 23:04:29
680
原创 缺少android.permission.SET_WALLPAPER_COMPONENT权限,导致恢复动态壁纸失败
在节日壁纸功能开发时,有这样一个需求需要实现:当某个节日来临时,需要将用户当前的壁纸替换为用自己预定义的节日壁纸;当节日过完后,需要将用户恢复用户之前设置的壁纸。那么,如果用户之前设置的是动态壁纸的话,需要调用WallpaperManager.setWallpaperComponent(ComponentName name) 方法,将记录下来的ComponentName作为参数传递进去来恢复用户在
2017-03-12 22:48:21
3583
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人