自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

学无止境

学如逆水行舟,不进则退

  • 博客(40)
  • 资源 (7)
  • 问答 (4)
  • 收藏
  • 关注

原创 Android MVVM开发模式实践

MVVM模式相关概念MVC:(VIew-Model-Controller)早期将VIew、Model、Controller代码块进行划分,使得程序大部分分离,降低耦合。MVP:(VIew-Model-Presenter)由于MVC中View和Model之间的依赖太强,导致Activity中的代码过于臃肿。为了他们可以绝对独立的存在,慢慢演化出了MVP。在MVP中View并不直接使用Model,它...

2017-06-24 15:45:24 2067

原创 函数式编程和响应式编程

在程序开发中,a=b+c;赋值之后,b或者c的值变化后,a的值不会跟着变化。响应式编程目标就是,如果b或者c的数值发生变化,a的数值会同时发生变化。函数式编程函数式编程是一系列被不公平对待的编程思想的保护伞,它的核心思想是,它是一种将程序看成是数学方法的求值、不会改变状态、不会产生副作用(后面我们马上会谈到)的编程方式。FP 核心思想强调:声明式代码 —— 程序员应该关心是什么,让编译器和运行环境...

2017-06-12 21:37:57 10619

原创 Android跨进程通信常见方式

由于android系统中应用程序之间不能共享内存,因此,在不同应用程序之间交互数据(跨进程通讯)就稍微麻烦一些。在android SDK中提供了4种用于跨进程通讯的方式,这4种方式正好对应于android系统中4种应用程序组件:Activity、Content Provider、Broadcast和Service。Activity可以跨进程调用其他应用程序的Activity;   Conten...

2017-06-12 21:16:09 2584 1

原创 Android开发中常用到的设计模式

单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。热门词汇:单例 唯一 私有构造单例模式好处由于单例模式在内存中只有一个实例,减少了内存开销。对于那些耗内存的类,只实例化一次,大大提高性能,尤其是移动开发中。单例模式可以避免对资源的多重占用,例如一个写文件时,由于只有一个实例存在内存中,避免对同一个资源文件的同时写操作。单例模式可以在系统设置全局的访问点,优化和共享资源访问。适用...

2017-06-12 20:49:20 1295 1

原创 Java锁机制--synchronized

在理解锁机制前,我们需要了解线程安全和并发相关的知识。Java内存模型lock(锁定):作用于主内存的变量,它把一个变量标识为一个线程独占的状态;unlock(解锁):作用于主内存的变量,它把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定;read(读取):作用于主内存的变量,它把一个变量的值从主内存传送到线程中的工作内存,以便随后的load动作使用;load(载入):作用

2017-06-09 22:37:29 513

原创 Android高阶知识扩展

通信体系Http:HttpClient、HttpConnectionSocketAndroid与服务器的通信方式主要有两种,一是Http通信,一是Socket通信。两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务器端才能向客户端返回数据。而Socket通信则是在双方建立起连接后就可以直接进行数据的传输,在连接时可实现信息的主动推...

2017-06-05 15:07:15 1073 1

原创 Android IPC 机制---Binder连接池

什么是IPC机制以及IPC机制的种类在Linux中,是以进程为单位分配和管理资源的。出于保护机制,一个进程不能直接访问另一个进程的资源,也就是说,进程之间互相封闭。但是,一个复杂的应用系统中,通常会使用多个相关的进程来共同完成一项任务,因此要求进程之间必须能够互相通信,从而共享资源和信息。所以,操作系统内核必须提供进程间的通信机制(IPC)。IPC机制种类:采用命名管道(name pipe),消息队

2017-06-04 21:10:37 635 1

原创 Android长连接,怎么处理心跳机制

心跳机制心跳机制是定时发送一个自定义的结构体(心跳包),让对方知道自己还活着,以确保连接的有效性的机制。当一台智能手机连上移动网络时,其实并没有真正连接上Internet,运营商分配给手机的IP其实是运营商的内网IP,手机终端要连接上Internet还必须通过运营商的网关进行IP地址的转换,这个网关简称为NAT(NetWork Address Translation),简单来说就是手机终端连接Int...

2017-06-04 20:53:08 2172

原创 Android中弱引用与软引用的应用场景

SoftReference:软引用–>当虚拟机内存不足时,将会回收它指向的对象;需要获取对象时,可以调用get方法。WeakReference:弱引用–>随时可能会被垃圾回收器回收,不一定要等到虚拟机内存不足时才强制回收。要获取对象时,同样可以调用get方法。WeakReference一般用来防止内存泄漏,要保证内存被虚拟机回收,SoftReference多用作来实现缓存机制(cache)。如...

2017-06-04 20:41:44 2406 2

原创 Android怎么加速启动Activity

减少onCreate的时间,那就精简onCreate里的代码,放在onResume里好了。为了用户体验更好一些,把页面显示的View细分一下,放在AsyncTask里逐步显示,如果你够熟练,用handler更好,这样用户的看到的就是有层次有步骤的一个个的view的展示,不会是先看到一个黑屏,然后一下显示所有view。最好作成动画,效果更自然些。...

2017-06-04 20:33:57 1973 1

原创 Android应用保活方案分享

同时,随着Android系统的不断更新和优化,一些旧的保活方法可能逐渐失效或被限制,因此需要持续关注系统更新和新的保活策略。在Android系统中,保活(保持应用进程一直存活)就是为了让应用在后台持续运行,来实现某些特定的功能,如实时消息推送、定位服务等。:通过将应用的Service设置为前台服务,可以显著提高进程的优先级,使得系统认为该服务是用户当前关心的,从而不容易被系统杀死。:通过一些技巧如启动一个透明的Activity或显示一个空的通知,可以间接提升进程的优先级,使其更不容易被系统杀死。

2017-06-04 20:24:08 606 1

原创 Android怎样退出终止App

使用单例模式创建一个Activity管理对象,该对象中有一个Activity容器(具体实现自己处理,使用LinkedList等)专门负责存储新开启的每一个Activity。

2017-06-04 20:22:22 1897

原创 Handler、Loop消息队列模型,各部分的作用

Android系统的消息队列和消息循环都是针对具体线程的,一个线程可以存在(当然也可以不存在)一个消息队列(Message Queue)和一个消息循环(Looper)。Android中除了UI线程(主线程),创建的工作线程默认是没有消息循环和消息队列的。如果想让该线程具有消息队列和消息循环,并具有消息处理机制,就需要在线程中首先调用Looper.prepare()来创建消息队列,然后调用Looper...

2017-06-04 12:47:21 1489

原创 Thread、AsycTask、IntentService的使用场景与特点

Thread当一个 Activity 被 finish 之后 ,如果你没有主动停止 Thread 或者 Thread 里的 run 方法没有执行完毕的话,Thread 也会一直执行。IntentServiceSerivce+handler的结合产物,可以在onHandleIntent直接处理耗时操作。而本地service和远程service不能在onStart方法中执行耗时操作,只能放在子线程中进行...

2017-06-04 12:27:50 2159

原创 Activity缓存方法--onSaveInstanceState

onSaveInstanceState函数用于保存Activity的状态信息(UI控件的状态信息)和用户保存的信息。 onSaveInstanceState函数调用时间当用户按下HOME键时长按HOME键,选择运行其他的程序时按下电源按键(关闭屏幕显示)时从activity A中启动一个新的activity时屏幕方向切换时,例如从竖屏切换到横屏时当系统销毁一个Activity的时候,o

2017-06-04 12:17:19 740 1

原创 Android LayoutInflater(布局填充器)使用指南

inflate()方法一般接收两个参数,第一个参数就是要加载的布局id,第二个参数是指给该布局的外部再嵌套一层父布局,如果不需要就直接传nullinflate()方法还有个接收三个参数的方法重载: inflate(int resource, ViewGroup root, boolean attachToRoot) 如果root为null,attachToRoot将失去作用,设置任何值都没有意义。

2017-06-03 18:38:48 513

原创 Android开发之Intent跳转到系统应用中的拨号界面

IntentUtils.java/** * 拨打电话的intent * * @param phoneNumber 电话号码 */public static Intent newCallPhoneIntent(String phoneNumber) { if (!TextUtils.isEmpty(phoneNumber)) { return new Intent(I

2017-06-03 18:29:34 638

原创 Android cursor遍历数据

数据存储为一行多列时Person person = new Person();double amount = 0;if (cursor != null && cursor.moveToFirst()) { int indexOfPerson = cursor.getColumnIndex(Calculate.COLUMN_PERSON); int indexOfAmount =

2017-06-03 18:25:10 6283

原创 Android onNewIntent()使用

如果一个应用的Activity供多种方式调用启动,多个调用希望只有一个Activity的实例存在,这就需要Activity的onNewIntent(Intent intent)方法了。只要在Activity中加入自己的onNewIntent(intent)的实现,然后加上Manifest中对Activity设置lanuchMode=“singleTask”就可以了。 onNewIntent()非常好

2017-06-03 18:20:53 650

原创 Android面试-基础知识

Android四大组件:Activity、Service、BroadcastReceiver、ContentProvider

2017-06-03 12:23:56 976

原创 过滤 List 容器中重复(相同)的数据元素

Set< ? > set = new HashSet(list);list.clear();list.addAll(set);

2017-06-03 12:04:04 2173

原创 Android面试-Java高级

每个处理器通过嗅探在总线上传播的数据来检测自己缓存的信息是不是过期了,当处理器发现自己缓存行对应的内存地址被修改了,就会将当前处理器的缓存行设置为无效状态,当处理器要对这个数据进行修改操作的时候,会强制重新从系统内存里把数据读到处理器缓存里。Java的异常体系是Java编程语言中的一个重要组成部分,用于处理程序运行时可能出现的各种异常情况。但是就算回写内存,如果其他处理器缓存的值还是旧的,在执行计算操作就会有问题,所以在多处理器下,为了保证各个处理器的缓存是一致的,就会实现缓存一致性协议。

2017-06-03 12:00:05 666 1

原创 Android shell脚本运用

执行sh脚本chmod +x filename./filename自动运行monkeymonkey.sh#!/bin/bash. ~/.envlogdir=~/monkeyreportmkdir -p $logdirecho "monkey test" >> $logdir/log.txtdate >> $logdir/log.txtwhich adb >> $logdir/log.txt

2017-06-03 11:16:23 2385 1

原创 Android Gradle 高级用法

都是占位符,它们在Gradle构建脚本中被定义,并在构建过程中被替换为实际的值。这样,你就可以根据不同的构建类型(如debug和release)或产品风格(如dev、test和prod)来动态地配置你的AndroidManifest.xml文件了。配置好这些排除规则后,Gradle在构建APK时会自动排除指定的资源文件,从而减小APK的大小。Android Gradle构建系统提供了对资源文件的灵活处理,包括排除某些不需要的资源文件,以减小构建产物的大小。在Gradle构建脚本中,你可以配置。

2017-06-03 10:41:43 1904 1

原创 Android面试--高级知识

在Android开发中,自定义View的机型适配是一个重要的问题,因为不同的设备和屏幕尺寸可能会对View的显示和布局产生不同的影响。以下是一些建议和策略,帮助你在创建自定义View时考虑机型适配:使用dp单位而非px使用dp(密度无关像素)作为自定义View的尺寸单位,而不是px。dp单位会根据设备的屏幕密度进行自动转换,确保在不同设备上显示的一致性。考虑屏幕尺寸和密度在自定义View的构造函数或布局文件中,可以通过获取屏幕的密度和尺寸信息,并据此调整View的属性。支持不同屏幕方向。

2017-06-02 15:12:58 2408

原创 Android面试-数据结构与算法

链表与数组数组静态分配内存,链表动态分配内存;数组在内存中连续,链表不连续;数组元素在栈区,链表元素在堆区;数组利用下标定位,时间复杂度为O(1),链表定位元素时间复杂度O(n);数组插入或删除元素的时间复杂度O(n),链表的时间复杂度O(1)。堆、栈、队列① 堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。② 栈就是一个桶...

2017-06-02 12:32:41 5331

原创 Android面试-网络知识

OSI,TCP/IP,五层协议的体系结构,以及各层协议OSI分层 (7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。TCP/IP分层(4层):网络接口层、 网际层、运输层、 应用层。五层协议 (5层):物理层、数据链路层、网络层、运输层、 应用层。每一层的协议如下:物理层:RJ45、CLOCK、IEEE802.3 (中继器,集线器)数据链路:PPP、FR、HDLC、VLA...

2017-06-01 20:42:27 2912 1

原创 Android常用第三方框架整理

缓存 DiskLruCacheLRU(Least Recently Used),即近期最少使用算法。使用缓存策略, 对网络上下载的图片等资源文件进行缓存, 当再次请求同一个资源url时, 首先从缓存中查找是否存在, 当不存在时再从网络上下载。采用缓存, 除了提高获取资源的速度, 也对减少使用用户手机上的流量有很好的作用. 核心思想是当缓存满时,会优先淘汰那些最少使用的缓存对象。采用LRU算法的缓存有...

2017-06-01 17:19:48 7686 1

原创 狱吏问题--数学建模的使用

综上所述,数学建模在狱吏问题中起到了至关重要的作用。通过数学建模,可以将问题抽象化、深入分析和算法实现,从而得到最终的结果。

2017-06-01 14:28:57 2132 1

原创 迭代法求平方根

迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法,即一次性解决问题。迭代法又分为精确迭代和近似迭代,“二分法”和“牛顿迭代法”属于近似迭代法。迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。求一个数的平方根,已经有...

2017-06-01 14:24:15 1866 1

原创 逻辑和判断谁是小偷

题目: 警察局抓了a,b,c,d四名偷窃嫌疑犯,当中只有一个是小偷,审问结果如下: a说:“我不是小偷。” b说:“c是小偷。” c说:“小偷肯定是d。” d说:“c在冤枉人。” 现在已经知道4个人中3人说的是真话,一个说的是假话,那么谁是小偷?...

2017-06-01 14:18:51 6009 5

原创 C语言求1000以内完数

一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如:6=1+2+3.编程找出1000以内的所有完数。

2017-06-01 14:15:23 23993 5

原创 C语言求1000以内水仙花数

水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 n 位数(n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。...

2017-06-01 14:11:29 11560 4

原创 动态规划解决数字塔-数字三角形问题

给定一个由N行数字组成的数字三角形,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大,以及路径。

2017-06-01 14:04:27 1324

原创 C语言求1000以内守形数

若正整数n是它的平方数的尾部,则称n为守形数,又称同构数。例如:6是其平方数36的尾部,76是其平方数5776的尾部,6和76都是守形数。

2017-06-01 13:54:30 11331 1

原创 开灯问题算法

描述有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2 的倍数的开关(这些灯将被关掉),第3 个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共有k个人,问最后有哪些灯开着?输入:n和k,输出开着的灯编号。k≤n≤1000输入输入一组数据:n和k输出输出开着的灯编号样例输入7 3样例输出1 5 6 7//乒乓开关 a[i]=1-a[i]...

2017-06-01 11:02:58 924 1

原创 竞赛名次问题--信息数字化

三位老师对某次数学竞赛进行了预测。他们的预测如下:甲说:学生A得第一名,学生B得第三名。 乙说:学生C得第一名,学生D得第四名。丙说:学生D得第二名,学生A得第三名。竞赛结果表明,他们都说对了一半,说错了一半,并且无并列名次,试编程输出A、B、C、D各自的名次。...

2017-06-01 10:50:06 1087 1

原创 递归判断一个数是不是回文数

回文数就是原数与其倒置后的数相等,如:123321,到之后仍为123321,即为回文数。

2017-06-01 10:45:15 6427 5

原创 回溯法求马的遍历问题

需要注意的是,由于马在棋盘上只能走“日”字形,因此有些格子可能无法从某些位置到达。例如,如果我们发现某个位置无法到达某个特定的格子,我们就可以提前结束对该位置的搜索。在5x4的棋盘上,我们需要找到一种方法,使得马从起始位置出发,遍历棋盘上的每一个格子,并且每个格子只被遍历一次。回溯法是一种求解约束满足问题的有效方法,它通过搜索所有可能的解空间来找到所有满足约束条件的解。在马的遍历问题中,我们可以使用回溯法来找到马在棋盘上遍历所有格子的所有路径。

2017-06-01 10:38:47 3982 2

原创 猴子吃桃问题

我们可以观察到,每一天的桃子数量是前一天数量的一半再减一,这个过程可以表示为:第i天的桃子数量 = (第i+1天的桃子数量 + 1) * 2。如果我们知道第N天只剩下一个桃子,那么我们可以从第N天开始,依次向前计算每一天的桃子数量,直到计算到第一天。递归是一种解决问题的方法,它将问题分解为更小的子问题,然后使用这些子问题的解来构建原问题的解。猴子吃桃问题是一个经典的数学问题,通常描述为:猴子第一天摘了若干桃子,吃了一半又一个,第二天又吃了剩下的一半多一个,如此循环,等到第N天,发现只剩下一个桃子。

2017-06-01 10:37:01 539 1

IoT(物联网)开发使用的低功耗蓝牙库

基于BLE4.0版本实现的专为IoT(物联网)开发用的低功耗蓝牙库。

2024-06-02

基于Android无障碍服务实现的自动连点器

基于Android无障碍服务实现的自动连点器,可以自由设置坐标和点击速度,操作简单,功能稳定。

2024-05-10

支持倍速播放的TV视频播放器源码

使用Kotlin语言编写的一款集成了ijkplayer的视频播放器,同时实现了本地和在线播放功能,支持倍速播放。

2018-08-23

gradle-4.1-all.zip离线包

Android Studio3.0对应的Gradle插件离线下载包 官网https://services.gradle.org/distributions/

2017-10-30

Kotlin语法学习

Kotlin语法学习-变量定义、函数扩展、Parcelable序列化、编写工具类、Activity跳转

2017-08-16

仿微信点击图片放大,并可滑动浏览效果demo

仿微信点击图片放大,并可滑动浏览效果

2017-08-16

Android RecyclerView 间距全适配

RecyclerView自定义行列间距

2017-08-16

Android侧滑编辑、删除效果Demo源码

一种易扩展、使用简单的Android侧滑删除控件。

2017-08-16

Android实现一种简易的Banner效果

使用ViewPager简单实现循环播放多个广告图片的banner效果,利用Handler与Runnable配合实现指定功能模块的定时循环执行。

2017-04-05

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除