- 博客(38)
- 资源 (13)
- 收藏
- 关注
原创 面试记录
一 , 面试的情商1,请先简单自己介绍一下。2,最近做过的应用有哪些。3,你负责哪个模块的开发。4,你觉得哪个模块是比较难。5,有没有用到些什么设计模式或者比较新鲜的东西。6,你上家离职原因。7,你期望薪资多少。8,对于本次面试你有何感想。9,还有别的想要了解一下吗。二,java笔试1,父类的静态方法能否被子类重写。2,范型在编译期有效。3,创建...
2019-03-12 22:37:24
417
原创 递归总结
递归需要满足三个条件:1、一个问题可以分解为几个子问题的解。2、这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一致。3、存在递归终止条件。如何编写递归代码?写出递归公式,找到终止条件。 总结:写递归代码的关键就是找到如何将大问题分解为小问题的规律,并且基于此写出递推公式,然后再推敲终止条件,最后将递推公式和终止条件翻译成代码。 递归代码要警惕堆栈...
2018-10-14 21:41:15
432
原创 android数据库更新简介
概述Android应用程序组件Content Provider中的数据更新通知机制和Android系统中的广播通知机制的有点类似。它们有三个主要区别,区别一是前者是通过URI来把通知的发送者和接收者关联在一起的,而后者是通过intent来关联的;二是前者的通知注册中心是由ContentService服务来扮演,而后者是由ActivityManagerService服
2016-12-08 10:42:55
634
原创 android系统联系人查询流程
概述在Android应用框架中一般都会划分为三层:数据层、数据访问层和业务层。数据层基本都是用sqlite来存储数据,数据访问层是借用四大组件中的内容提供器来实现,业务层就是各个应用,比如电话本。三层结构如下图所示:这里将详细总结下电话本对数据库的查询流程。创建数据库当系统启动,所有服务都准备好之后,ContactsUpgrade
2016-12-06 17:00:08
729
转载 Android如何关闭硬件加速
原文地址:http://developer.android.com/guide/topics/graphics/hardware-accel.html译文地址:http://blog.chenming.info/blog/2012/09/18/android-hardware-accel/硬件加速Android 3.0 (API level 11), 开始支持所有的View
2016-11-24 14:06:23
18810
1
原创 fitSystemWindows属性
官方描述: Boolean internal attribute to adjust view layout based on system windows such as the status bar. If true, adjusts the padding of this view to leave space for the system windows. Wil
2016-11-18 14:51:13
2145
转载 ScrollView的android:fillViewport="true"
http://stackoverflow.com/questions/2599837/linearlayout-not-expanding-inside-a-scrollviewhttp://blog.csdn.net/linqingf/article/details/6573602当fillViewport="true" 设置为 true里 , s
2016-11-18 14:06:00
641
转载 android studio 快捷键记录
功能快捷键 功能快捷键格式化代码command + alt + L 运行程序到设备Ctrl + R导包、修正alt + enter 运行Debug到设备Ctrl + D复制行command + D 全
2016-11-15 13:58:24
327
原创 Android实现点击AlertDialog上按钮时不关闭对话框的方法
最近在做项目上做一些需求,途中遇到一个AlertDialog点击按钮问题,默认点击OK/cancel都会关闭对话框。但需求上要求在点击OK的时候做一些处理,根据处理结果来结束对话框。但是只要设置setPositiveButton("ok",this)了回调,点击ok就会关闭对话框。于是抱着好奇心去跟踪下源码: public Builder setPositiveButton(Ch
2016-11-08 19:54:58
806
转载 Android 7.0 FileProvider的使用
我们使用手机的时候经常会看到应用程序提示升级,大部分应用内部都需要实现升级提醒和应用程序文件(APK文件)下载。一般写法都差不多,比如在启动app的时候,通过api接口获得服务器最新的版本号,然后和本地的版本号比较,来判断是否需要弹出提示框下载,当然也可以通过推送的自定义消息来实现。我们这里主要讨论的是应用程序下载,并在通知栏提醒下载完成。实现过程大致分为三步:创建一个serv
2016-10-26 15:04:04
19050
2
原创 android 6.0运行时权限
记得在android6.0以前,应用需要权限只要在androidManifest.xml配置就可以了。为了安全的考虑,android 6.0开始使用动态申请权限,除了在androidManifest.xml配置以外,还需要在代码里面控制权限申请,虽然权限的申请变复杂了,但是对于用户来说更安全了。但也并不是所有的权限都要动态申请。需要申请的权限如下所示:Permissio
2016-10-25 15:55:47
413
原创 基于N源码的AccountManagerService简单认识和账户添加流程分析
AccountManagerService负责管理手机中用户的在线账户,主要的工作涉及账户的添加、删除和AuthToken的获取和更新。下面看下AccountManagerService的初始化,进入SystemServer中的startOtherServices方法看到如下代码:mSystemServiceManager.startService(ACCOUNT_SERVICE_CLAS
2016-10-13 20:13:14
3572
原创 基于N源码的ContentService数据通知机制
ContentService是Android平台中数据更新通知的执行者。首先看下ContentService的创建:进入系统服务SystemServer中的startOtherServices方法,有如下这边代码:mSystemServiceManager.startService(CONTENT_SERVICE_CLASS);其中CONTENT_SERVICE_CLASS是:
2016-10-13 09:56:55
954
原创 Java和Android反射使用记录
平时看源码经常会遇到反射的代码,这里记录下反射的用法,方便查阅。首先在java中测试,创建父类Persion:package com.invok;public abstract class Person { String name = ""; private int age = 0; public int fPubVar = 0; abstract void getPhon
2016-10-10 23:07:38
495
原创 JAVA动态代理学习
代理模式分为静态代理和动态代理,静态代理中的代理是由程序员自己编写的,也就是说在我们的代码运行前,代理类的class编译文件就已存在;而动态代理与其相反,代理类是在运行阶段由JVM帮忙生成。java也给我们提供了一个便捷的动态代理接口InvocationHandler,实现该接口需要重写其invoke方法,如下:public class DynamicProxy implement
2016-09-30 11:25:58
331
原创 基于N源码的ContentProvider调用流程分析
内容提供者顾名思义是用来提供数据的,现在假设我要获取系统联系人的数据,可以这样查询:getContentResolver().query(Contacts.CONTENT_URI, null, null, null, null);这样就会跳转到联系人的provider的query:public class ContactsProvider2 extends AbstractContac
2016-09-29 15:11:42
991
原创 基于N源码的广播注册和发送流程分析
广播可分为普通广播、有序广播和粘性广播,广播的注册方式分为静态注册和动态注册。在N上删除了三项隐式广播,以帮助优化内存使用和电量消耗。这三者广播为:CONNECTIVITY_ACTION;ACTION_NEW_PICTURE;ACTION_NEW_VIDEO。意思就是在AndroidManifest文件中静态注册是无法接受到通知,必须动态注册才可以。下面看到动态注册的流程:同样进入Cont
2016-09-28 11:15:50
1129
原创 基于N源码Service启动分析
前面分析了应用内部Activity的启动过程,其实如果是应用第一个Activity的启动,流程上还会多一些创建进程和ActivityThread的过程。Service同样也是如此,如果是应用内部启动服务,且没有配置android:process的话,默认就在应用进程中启动,下面我们就配置android:process=“:remote”,让服务在另一个进程中启动。 private void s
2016-09-26 16:32:22
817
原创 基于N源码的Activity的启动过程分析
对于该主题的文章,网上泛滥,为了加深印象,最好还是自己跟一遍源码,这样对框架的认识以及对应用的控制都是很有帮助的。推荐老罗的一些列文章:Android应用程序的Activity启动过程简要介绍和学习计划老罗的博客写的非常好,但分析的源码有点老,不过大体思路是不会变的。我这里就基于android 7.0的源码来跟下这个流程,希望能帮到大家。
2016-09-22 13:47:52
2752
2
原创 Activity过度动画应用
这里介绍一下Activity之间共享元素过渡动画的使用,首先看两张效果图: 可以看到非常的酷炫。关于Activity的过渡动画不了解的同学可以先了解一下这篇文章:Android 5.0学习之Activity过渡动画
2016-09-21 11:32:11
2031
原创 AIDL简单使用
AIDL是Android Interface Definition Language, 顾名思义,它主要就是用来定义接口的一种语言。Android提供AIDL主要用来进程间通讯。从AIDL的功能来看,它主要的应用场景就是IPC。虽然同一个进程中的client-service也能够通过AIDL定义接口来进行通信,但这并没有发挥AIDL的主要功能。 概括来说:如果不需要IPC,那就直接实现
2016-09-19 11:29:52
1009
原创 RXBUS的简单使用
RxBus是用来进行组件之间通讯的。因为项目当中用到了RxJava,因此用RxBus来实现组件之间的通讯,相对来说比较方便。关于RxBus的介绍和其他组件通讯工具EventBus可参考下面链接:用RxJava实现事件总线EventBus实战在没有这些工具之前,我们是怎么实现组件之间的通讯呢?我想到了三点:1、用intent来传递数据2、用注入依赖回调(意思就是注册监听回调)
2016-09-12 11:11:23
7291
原创 Android电话本数据查询总结
该文总结下工作当中维护的联系人模块中的数据查询流程。该流程在很多系统APP上都类似,了解这个过程还是很有必要的。在Android应用框架中一般都会划分为三层:数据层、数据访问层和业务层。数据层基本都是用sqlite来存储数据,数据访问层是借用四大组件中的内容提供器来实现,业务层就是各个应用,比如电话本。三层结构如下图所示:这里将详细总结下电话本对数据库的查询流程。1、创建数据库
2016-09-09 08:53:02
1779
3
原创 搭建MVP模板框架
本文将记录自己项目中用到的MVP框架模板,方便同学参考。对于MVP框架不熟的同学,建议看下我的上一篇转载的文章。或者查看原文:选择恐惧症的福音!教你认清MVC,MVP和MVVM下面看下我项目中的流程图:这样看可能并不是很清晰,再看下UML图:下面教大家一步一步来实现这个模板:1、
2016-09-06 18:55:10
437
原创 RXjava解决数据管理问题
针对我的项目借机系统中,数据管理问题给出解决方案。为了UI显示数据的流畅性,数据管理也必须采取异步方案。android原生提供了一些异步类AysncTask等,也可以采用Thread+Handler的方案。但我目前遇到的问题是这样的,比如添加手机功能,我需要先上传到网络服务器,成功后再添加到本地数据库。还有获取数据也是,我需要先从网络服务器获取数据,如果未联网,我需要从本地数据库来获取数据
2016-06-15 17:19:33
545
原创 借机系统项目记录
做这个项目的缘由是科室内部经常不断的借手机,借着借着手机不知道跑哪去了,很是头疼。后来科长让一个人来统一管理手机。借的人必须登记,这样手机在谁那一目了然。随着项目越来越多,手机也越来越多。管理手机的人每天都要应付借手机和还手机的人,使得自己没法安心工作。我看在眼里也觉得好烦,最近闲了下来,我就打算做一款APP来管理这堆手机,希望能使管理员能轻松点,而且每个人都可以安装APP来查看当前所有手机的
2016-06-02 23:02:02
345
原创 Asynctask获取网络数据使用
主界面代码如下,仅仅为了记录Asynctask的使用。业务代码写在Activity里面肯定不好的。最好使用MVP模式来实现。publicclass MainActivity extendsActivity { privatestatic String url = "http://www.imooc.com/api/teacher?type=
2016-05-30 21:19:46
682
原创 消息机制
每个android应用在被启动时都会创建一个线程,这个线程成为主线程或者UI线程。android应用的所有操作默认都会运行在这个线程中。但是为了保证UI的流畅性,通常都会将耗时的操作放在子线程中。android3.0后,禁止在主线程中执行网络请求,否则会抛出异常,可见UI线程中执行耗时操作是非常不推荐的行为。我们知道android应用启动时,会默认有一个主线程,在这个线程中会关联一个消息队列,
2016-05-29 22:22:06
324
原创 android中的动画
在android中动画的分类较多,有最早的桢动画、补间动画,从android3.0之后添加了属性动画,而在android5.0中又增加了VectorDrawable,使得android的动画多种多样,能够满足用户的各种需求。动画实际上就是在指定的时间段内持续的修改某个属性的值,使得该值在指定取值范围之内平滑的过度。帧动画是一系列图片按照一定的顺序展示的过程,和放电影的机制很相似,它的原理就是在
2016-05-29 08:56:40
502
原创 scroller的使用
Scroller是一个帮助view滚动的辅助类,在使用它之前,用户需要通过startScroll来设置滚动的参数,即起始点坐标和xy轴上要滚动的举例。Scroller它封装了滚动时间、要滚动的目标x轴和y轴,以及在每个时间内veiw应该滚动到的xy轴的坐标点,这样用户就可以在有效的滚动周期内通过Scroller的getCurx和getCury来获取当前时刻view应该滚动的位置,然后通过调用vie
2016-05-28 16:15:59
475
原创 自定义view
自定义view是开发人员必须掌握的最重要技能之一。对于继承自view类的自定义控件来说,核心的步骤分别为尺寸测量和绘制,对应的函数是onMeasure、onDraw。过程如下:继承自view创建自定义控件;如有需要自定义view属性,也就是在values/attrs.xml中定义属性集;在xml中引入命名控件,设置属性;在代码中读取xml中的属性,初始化视图;测量视图大小;绘制视图内容;在视图树渲
2016-05-26 22:59:18
269
原创 重要的View
用户界面都是有Acitivity组件,Activity中关联了一个PhoneWindow创建,在这个窗口下则管理了一个视图树。这个试图树的顶级试图就是一个Viewgroup类型的DecorView,DecorView下就是各个视图控件。listview加载时会根据数据的个数来创建Item view,根据索引从数据集合中获取数据,调用getView获取具体的试图,并且与数据绑定。但是并不是有多少
2016-05-25 21:59:12
400
原创 Broadcast和ContentProvider
广播机制是一个典型的发布-订阅模式,也就是我们所说的观察者模式。广播机制的最大的特点就是接收双方的完全耦合。广播机制包含三个基本要素,分别是用于发送广播的Broadcast、接收广播的BroadcastReceiver以及用于传递信息的 Intent。广播可分为普通广播、有序广播、本地广播和Sticky广播。有序广播通过sendOrderedBroadcast()来发送,所有的广播接收器按照优
2016-05-24 21:04:15
798
原创 Service和AIDL
Service是android中实现程序后台运行的解决方案,它非常适合用于去执行那些不需要和用户交互而且还要长期运行的任务。Service默认并不会运行在子线程中,它也不运行在一个独立的进程中,他同样执行在UI线程中,因此不要在Service中执行耗时的操作,除非你在Service中创建了子线程来完成耗时操作。当某个应用程序进程被杀死时,所有依赖于该进程的Service也会停止运行。服务启动了
2016-05-23 23:08:23
478
原创 Activity生命周期和启动模式
Activity的生命周期分为两个部分,一部分是典型情况下的生命周期,另一部分是异常情况下的生命周期。onCreate()他会在Activity第一次被创建时调用,通常完成Activity的初始化操作,如设置布局、初始化试图、绑定事件等。onStart()此时的Activity还处在不可见状态、它的下一个状态就是Activity变得可见的时候,也就是这个函数在Activity可见之前被调用
2016-05-23 21:28:04
464
原创 寻找android中的设计模式(三)
寻找android中的设计模式(三)寻找工厂模式工厂模式的家族分四种:静态工厂模式、简单工厂模式、工厂方法模式、抽象工厂模式。下面以开冒菜店为例,假设我定义了一家冒菜店: public class MaoCaiStore { public MaoCai sellMaoCai(String type) { MaoCai m
2016-04-13 15:08:46
512
原创 寻找android中的设计模式(二)
寻找android中的设计模式(二)概述前面学习了单例模式和观察者模式,其中观察者模式可以很好的降低对象直接的耦合。后面的模式会接触到更多的设计原则。寻找策略模式定义:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。学完之后,我也思考着生活当中哪些地方可以使用到。就以游戏为例吧,需求描述是:有很
2016-04-12 15:39:06
356
原创 寻找android中的设计模式(一)
概述维护android系统中的联系人模块有一段时间了,最近开始学习java设计模式,对书(HEAD_FIRST设计模式)中精彩设计非常崇拜和对OO原则有了更深刻的理解。作为对设计模式的初学者,我将记录对它的追求之路。该系列文章将结合联系人应用,寻找google原生代码中设计模式。寻找单例模式定义:确保一个类只有一个实例,并提供一个全局访问点。
2016-04-11 12:52:12
1637
1
仿知乎应用
2016-09-21
手机管理系统APP
2016-09-19
Retrofit+Rxjava+MVP组合屌丝APP
2016-09-19
Android亲情电话
2016-04-10
Activity和Fragment应用
2016-04-10
AndroidMetral联系人
2016-04-10
儿童腕表通讯录
2016-04-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人