![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android开发之路
文章平均质量分 76
Sunzxyong
最可怕的不是比你牛逼的有多少人,而是比你牛逼的人还比你更努力!
展开
-
并发编程之ThreadLocal、Volatile、synchronized、Atomic关键字扫盲
前言对于ThreadLocal、Volatile、synchronized、Atomic这四个关键字,我想一提及到大家肯定都想到的是解决在多线程并发环境下资源的共享问题,但是要细说每一个的特点、区别、应用场景、内部实现等,却可能模糊不清,说不出个所以然来,所以,本文就对这几个关键字做一些作用、特点、实现上的讲解。1、Atomic作用对于原子操作类,Java的concurrent并发包中主要为我们提供原创 2016-01-21 10:25:28 · 17321 阅读 · 14 评论 -
Android中ViewFlipper的使用详解
说到android的左右滑动效果我们可以说是在每个应用上面都可以看到这样的效果,不管是微博,还是QQ等。实现左右滑动的方式很多,有ViewPager(不过这个和需要android-support-v4.jar的支持),自定义实现Viewgroup,gallery等都可以达到这种效果。这里主要是做下ViewFliper来实现左右滑动的效果。ViewFlipper可以实现滑动ImageView原创 2015-02-26 10:45:28 · 5288 阅读 · 0 评论 -
优雅的App完全退出方案(没有任何内存泄漏隐患)
在Android开发过程中,特别是界面比较多的情况下,用平常的退出方式往往是不能完全退出这个应用,网络上也好多各种退出方案。其中一种应该是被广大开发者采纳使用,也非常的清晰方便,就是在Application中维护一个单例的List管理容器,每次打开新的Activity就把当前Activity加入到容器中,然后在需要完全退出的时,就循环遍历该容器分别finish()每个Activity,即达到完全退原创 2015-07-14 15:49:15 · 4145 阅读 · 10 评论 -
让App中加入LruCache缓存,轻松解决图片过多造成的OOM
上次有过电话面试中问到Android中的缓存策略,当时模糊不清的回答,现在好好理一下吧。Android中一般情况下采取的缓存策略是使用二级缓存,即内存缓存+硬盘缓存—>LruCache+DiskLruCache,二级缓存可以满足大部分的需求了,另外还有个三级缓存(内存缓存+硬盘缓存+网络缓存),其中DiskLruCache就是硬盘缓存,下篇再讲吧!1、那么LruCache到底是什么呢?原创 2015-07-21 17:18:31 · 1907 阅读 · 0 评论 -
com.android.dex.DexException: Multiple dex files define(jar包重复引用) 错误解决
前段时间开始转入Android studio,不料果真使用时候遇到些错误,在此记下!出现这个错误往往是在libs目录下有个jar包,然后在gradle文件中又引用了,即:共同引用了。解决方法:1、既然在gradle文件中引用了,即2,那么把libs中的删了。2、更改1中的配置,即把compile改为provided,更改方法可以手动更改,也可以在structure中原创 2015-07-11 19:13:38 · 6085 阅读 · 0 评论 -
Android studio之更改快捷键及自动导包
刚刚转入Android Studio,对AS中的一些操作还不太熟悉,所以记录一下。。。更改AS中的代码提示快捷键,AS做的也挺智能的,在Keymap中可以选择使用eclipse的快捷键设置,但是虽然设置了,对有些快捷键还是不能使用,那么就需要我们手动去修改了。在代码提示AS默认的快捷键是Ctrl+Alt+Space,反正我是用不惯,还是改为eclipse中的Alt+/吧,修改时必须原创 2015-05-13 13:44:19 · 7663 阅读 · 0 评论 -
Android官方推荐使用DialogFragment替换AlertDialog
DialogFragment是在Android3.0(API level 11)中引入的,它代替了已经不建议使用的AlertDialog。DialogFragment高效地封装和管理对话框的生命周期,并让Fragment和它包含的对话框的状态保持一致。那么,已经有了AlertDialog为什么要引入DialogFragment呢?DialogFragment对话框出现的意义原创 2015-05-25 18:06:31 · 15141 阅读 · 4 评论 -
Android支持多国语言化Values命名
android多国语言文件夹文件汇总如下:维吾尔文(中国):values-ug-rCN中文(中国):values-zh-rCN中文(台湾):values-zh-rTW中文(香港):values-zh-rHK英语(美国):values-en-rUS英语(英国):values-en-rGB英文(澳大利亚):values-en-rAU英文(原创 2015-05-18 12:25:30 · 2942 阅读 · 0 评论 -
Android ListPopupWindow的使用
其实像ListPopupWindow、PopupMenu的用法大致和PopupWindow的一样!就不讲了,相信用过PopupWindow的看一下就能明白。先上个效果图:ListPopupWindow可以用在下拉列表、查询结果显示、历史记录、提示输入等,当然PopupMenu也可以的。直接贴代码吧:public class MainActivity extends原创 2015-05-17 16:01:10 · 11683 阅读 · 1 评论 -
Android实战之ListView复选框
项目中有用到复选框的例子,啊啊......在网上查找有关资料,大多都是过于繁琐,所以自己决定写个这个方面的demo。。。先给个效果图:在ListView中添加复选框主要注意以下几个问题:1、ListView item与item中的控件抢焦点的问题(必须设置CheckBox不可点击和不能获取焦点,让ListView得到焦点)2、ListView的setChoicMode(in原创 2015-05-15 10:06:13 · 2449 阅读 · 0 评论 -
在Android Studio 上安装Genymotion插件
首先去官网http://www.genymotion.net/下载Genymotion并安装好。其次打开AS的设置界面,找到Plugins插件目录然后在搜索里搜Genymotion,然后点击Browse.....,就会在右边出现提示你安装Genymotion插件,点击安装即可。安装完毕后会提示你重启AS,点击重启。第二次打开AS后会在工具栏中出现Genymotion的小图标原创 2015-05-13 15:36:57 · 5938 阅读 · 0 评论 -
Android Studio设置代理更新下载SDK
代理主机和端口号按上图设置即可,便可以轻松的下载更新SDK啦~~~原创 2015-05-13 14:53:19 · 4347 阅读 · 0 评论 -
百度地图开发之获取定位地点
在前面几次我们分别完成了数据检索和线路规划的功能,但是如果我们不知道自己位置,检索起来说是不是会很麻烦呢?知道自己位置就可以根据自己的位置进行检索和路线规划。定位服务在读地图的定位服务是与基本地图服务分开的所以需要引入另外的so文件盒jar包,如果你选择的是复合包的话,只用一如so文件就OK了。首先在清单文件中加上如下的服务ser原创 2015-05-04 11:52:53 · 1725 阅读 · 0 评论 -
百度地图再进阶之路线规划
路线规划包含,驾车、公交、和步行三种今天我们一起来,一一看下。DrivingRouteLine表示驾车路线DrivingRouteLine.DrivingStep表示一个驾车路段DrivingRoutePlanOption驾车路线规划参数DrivingRouteResult原创 2015-05-04 10:41:48 · 2026 阅读 · 0 评论 -
百度地图开发之不同图层及覆盖物
1.了解地图的最基本管理类BaiduMap 方法很简单就是[java] view plaincopyprint?mapview.getMap(); 然后我们来看一下里面的方法官方文档这么说来着voidaddHeatMap(HeatMap heatmap)添加热力图原创 2015-05-04 11:56:57 · 5134 阅读 · 1 评论 -
Android实现RecyclerView侧滑删除和长按拖拽-ItemTouchHelper
RecyclerView这个被誉为ListView和GirdView的替代品,它的用法在之前的一篇博文中就已经讲过了,今天我们就来实现RecyclerView的侧滑删除和长按拖拽功能,实现这两个功能我们只需要一个类——ItemTouchHelperItemTouchHelperGoogle官方文档上是这么介绍的: This is a utility class to add swipe to d原创 2015-08-24 14:03:42 · 17047 阅读 · 7 评论 -
仿微信雷达寻好友动画
先看看要实现的效果:这种效果正是类似微信上雷达寻找好友的动画,于是解压微信看看里面,发现微信是用一张图片做的旋转动画,于是乎看看这种特效,可以用画笔直接画出来,首先是四个圆,然后中间那部分扫描区便是颜色由透明渐变到淡白。比较简单。public class RaderView extends View { private Paint mPaintCircleLine;//绘制原创 2015-07-30 09:52:45 · 3022 阅读 · 2 评论 -
Android下拉上滑显示与隐藏Toolbar另一种实现
关于介绍就不说了,不使用嵌套滑动情况下,另一种实现,当然还可以用design包下的CoordinatorLayout.Behavior。比较简单直接添代码:继承RecyclerView.OnScrollListener重写onScrolled方法,同时定义两个抽象方法供我们处理隐藏和显示事件public abstract class RecyclerViewScrollListener extend原创 2015-08-26 15:25:47 · 13975 阅读 · 4 评论 -
Android更新UI的几种方法
在Android开发过程中,常需要更新界面的UI。比如网络请求操作、一些耗时操作都不能放在UI线程中运行的,需要放在子线程,而子线程又不能更新UI界面,这是我们需要引入一个Handler,消息处理机制。更新UI是要主线程(UI线程)来更新的,即UI线程更新。如果在主线线程之外的线程中直接更新页面显示常会报错。抛出异常:android.view.ViewRoot$CalledFromWrongThr原创 2015-02-20 21:50:09 · 1954 阅读 · 2 评论 -
我的第二个独立开发的邮箱类App—“简邮”(支持QQ、雅虎、阿里云、Outlook)
360手机市场地址:360市场其它市场还在审核,囧。。。为什么做这个App? 主要有两个原因 1、10月份正逢校招季,……当时和面试官介绍了这个APP 2、在苹果手机上看到一款内置的邮箱app支持多账户,收发邮件非常方便,于是想在Android上弄一个怎样使用简邮首先,这是移动端能支持邮件操作的基础!!!这是移动端能支持邮件操作的基础!!!这是移动端能支持邮件操作的基础!!! 重原创 2015-11-09 11:26:50 · 9759 阅读 · 16 评论 -
版本控制—使用Gradle自动管理应用程序版本
我们在开发App时,通常在项目的Release阶段我们需要设置应用的版本号和版本名称,也就是设置下面两个属性 versionCode versionName 版本号其中versionCode的值是int类型,主要作用就是作为应用内部的版本编号,为版本升级提供唯一的标识,通常设为是自增的,假如当前app的versionCode为1,下一代app的versionCode为2,那么就可以通过它原创 2015-11-07 13:10:35 · 3939 阅读 · 0 评论 -
Android事件分发机制
【注】:这篇文章中的内容都以这张图来讲解分发机制,其中A、B、C都是ViewGroup,它们的层次关系为:A为根布局,B为二级子布局,C为三级子布局,其中C布局中包含一个Button按钮,即A包含B,B包含C,C包含Button。 好了,废话少说。先来讲下今天的三位主角吧。 1、dispatchTouchEvent - 分发事件,默认为false。true:取消事件,不继续向下分发,false原创 2015-09-17 08:58:33 · 2036 阅读 · 0 评论 -
Android开发你不知道的TIPS
1、Space space是Android 4.0中新增的一个控件,它实际上可以用来分隔不同的控件,其中形成一个空白的区域.这是一个轻量级的视图组件,它可以跳过Draw,对于需要占位符的任何场景来说都是很棒的2、ValueAnimator.reverse() 这个方法可以很顺利地取消正在运行的动画3、DateUtils.formatDateTime() 用来进行区域格式化工作,输出格式化和本地化的时原创 2015-10-04 15:44:40 · 1586 阅读 · 0 评论 -
Android中让多个线程顺序执行探究
前言: 不知道从什么时候开始,越来越喜欢把平时学到的一些东西做个总结,做个梳理,于是坚持写博客。在我看来写博客是对自己的一种提升,也可以帮助在这个问题上有疑惑的猿。之前看到这样一个问题,就是有人因自己的技术还不扎实,想写博客,又怕写出来的博客怕别人说不正确。对于这种问题,我更多的是把写博客看成自己技术的总结,因为你总结一个技术,肯定是需要查大量资料,而在此过程中你不仅巩固了以前的知识也会不断的原创 2015-09-14 10:27:15 · 8005 阅读 · 4 评论 -
Android Studio中创建Kotlin For Android项目
Kotlin俗称Android中的Swift,它是Jetbrains公司开发的基于JVM的一门语言,JetBrains公司可能大家并不熟悉,不过相信IntelliJ IDE大家一定知道,Android Studio正是基于它开发的,Kotlin本身也是面向对象语言。为什么要使用Kotlin?它具有如下优点: 1、轻量级 2、和Java具有高度的交互性,可以和Java代码一起运行 3、原创 2015-09-08 11:01:45 · 4972 阅读 · 0 评论 -
Android百分比布局支持库(android-percent-support)
Android中提供了五种布局,其中用的最多的就是:LinearLayout, RelativeLayout 和 FrameLayout这三种布局,在对某一界面进行布局时最先想到也是通过这三种来布局的,不过当某一界面过于复杂时,往往会有多层嵌套,可能嵌套层数过深超过5层,比如,当我们有一个需求是这样的:界面中的一个按钮的长度需要是屏幕宽度的一半,而且需要在任何屏幕下都是屏幕宽度的一半,这个需求我们往原创 2015-09-02 09:30:05 · 4023 阅读 · 0 评论 -
使用Android Studio手把手教你将应用打包+代码混淆
最近几天用Google的Design库写了个App,使用Android Studio将app打包时遇到的几个瓶颈,所以把详细步骤写入下来。AS中怎么获取应用签名这和eclipse不同,eclipse中可以直接在软件内部查找到,而AS则需要通过命令行形式拿到,具体先进入.android目录下,如图: AS将应用打包AS版本1.3,步骤都以截图为示例:AS中Build->选择Generate sig原创 2015-08-04 17:00:43 · 3992 阅读 · 0 评论 -
DiskLruCache硬盘缓存技术详解
上次讲了使用内存缓存LruCache去加载很多图片而不造成OOM,而这种缓存的特点是在应用程序运行时管理内存中的资源(图片)的存储和释放,如果LruCache中有一张图片被释放了,再次加载该图片时需要重新从网络上下载下来,这就显得废流量不说,而且费时,网络不好的状况下用户需要等待,而且在没有网络的情况下不会显示任何数据。那么怎样才能解决这种情况呢?答案就是加入硬盘缓存DiskLruCache。原创 2015-07-23 16:28:04 · 3010 阅读 · 3 评论 -
Android中处理大图片时图片压缩
1、BitmapFactory.Options中的属性在进行图片压缩时,是通过设置BitmapFactory.Options的一些值来改变图片的属性的,下面我们来看看BitmapFactory.Options中常用的属性意思:options.inPreferredConfig - 设置Bitmap的偏好配置,值有Bitmap.Config.ARGB_8888,Bitmap.Conf原创 2015-07-22 11:27:13 · 3040 阅读 · 1 评论 -
RecyclerView添加Header和Footer
使用过RecyclerView的同学就知道它并没有添加header和footer的方法,而ListView和GirdView都有,但是开发过程中难免有需求需要添加一个自定义的header或者footer,或者不同布局的Item。好了,我们知道如果在ListView中要添加不同的布局的item,都是通过重写getItemViewType()和getViewTypeCount()这两个方法来控制的,OK原创 2015-08-26 16:34:36 · 11370 阅读 · 3 评论 -
ViewPager切换动画PageTransformer的使用
Android从3.0开始添加了属性动画后,诸多难以实现的动画都可以轻松解决了,v4包下的ViewPager控件当然也不例外,相对于非常平庸的默认切换动画,Google官方给我们展示了两个动画例子:DepthPageTransformer和ZoomOutPageTransformer,比较炫。实际上我们也可以通过实现ViewPager.PageTransformer接口来做出完全不同的切换原创 2015-07-16 15:12:09 · 3252 阅读 · 0 评论 -
关于Service中bindService注意的几个问题
最近有用到Activity需要不断的从Service中获取数据,第一个想法肯定就是通过bind回调机制了,有几点概念模糊特此记录下:单独使用bindService(),unbindService()会经历:->onCreate()->onBind()->Service running->onUnbind() -> onDestroy() 。单独使用startService(),stop原创 2015-07-17 21:48:39 · 8440 阅读 · 0 评论 -
百度地图SDK3.4的使用
使用过百度地图的开发者应该都知道原始百度地图的开发的基本流程,但是随着百度地图的更新,百度地图的api有了翻天覆地的变化,最新版本的sdk为v3.42015年4月14日上线,优化了许多接口的设计,简单了地图的开发方式。但是,对没有接触过新版地图开发的人来说,依然是望尘莫及,今天我们就一起来学习下最新版百度地图的开发吧1.获取开发者KEY下面是官方的说明:注意:为了给原创 2015-05-04 11:38:21 · 1685 阅读 · 4 评论 -
android 选项卡TabHost
选项卡主要有TabHost、TabWiget和 FramentLayout3个组件组成,用于实现一个多标签的用户界面,通过他可以将一个复杂的对话分隔成若干个标签页,实现对信息的分类显示和管理。使用给组件不仅可以使界面美观大方,还可以有效地减少窗体个数。 在Android中,实现选项卡的一半步骤如下:(1)在布局文件中添加实现选项卡所需的TabHost、TabWiget和 Fram转载 2015-05-04 10:32:52 · 1390 阅读 · 0 评论 -
Android之Animation动画的使用(一)
我们在使用一些控件时候,难免会设置一些进入和退出的动画效果,比如popupwindow、listview的item动画、按钮、图片等等,要使这些控件有动画效果,当然需要用到Animation了。下面我们就来讲讲Animation有哪些动画效果吧。Android的Animation由四种类型组成:alpha、scale、translate、rotate,对应的效果如下:X原创 2015-02-23 15:17:25 · 2264 阅读 · 0 评论 -
Android之触摸手势检测GestureDetector使用详解
在Android中,当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing,onSingleTapConfirmed(单击),onDoubleTap(双击)等等。一般情况下,我们知道View类有个View.OnTouchListener内部接口,通过重写他的onTouch(View v, MotionEvent event)方法,我们可以处理一些在该控件中触发原创 2015-02-26 15:19:50 · 6940 阅读 · 0 评论 -
Android监听屏幕解锁和判断屏幕状态
开发后台服务的时候经常需要对屏幕状态进行判断,如果是想要监听屏幕解锁事件,可以在配置里面注册action为 android.intent.action.USER_PRESENT的广播,则可以监听解锁事件。但有时候,在后台执行某个操作时,需要主动判断屏幕的状态,比如是否是亮着的,可以使用PowerManager的isScreenOn方法进行判断,比如屏幕是否开启了自动旋转等。注册监听解锁广播原创 2015-02-11 17:17:30 · 3355 阅读 · 0 评论 -
Android使用HttpUrlConnection请求服务器发送数据详解
HttpUrlConnection是java内置的api,在java.net包下,那么,它请求网络同样也有get请求和post请求两种方式。最常用的Http请求无非是get和post,get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet,post与get的不同之处在于post的参数不是放在URL字串里面,而是放在http请求的正文内。在Java中可以使用Http原创 2015-02-10 17:43:50 · 6769 阅读 · 0 评论 -
Android使用shape制作圆形控件及添加弹跳动画
————————本来为作者原创,未经同意禁止转载前言:我们在很多时候都需要在res/drawable文件夹下创建相应的xml文件来为控件添加一些样式效果,比如按钮按下时的按钮样式变化、或者指定按钮的一些边框样式、或者为常用的EditText、TextView、ImageView、ImageButton等等添加一些样式。今天我们就来讲下怎么制作圆形Button、圆形ImageView、圆原创 2015-02-25 13:59:22 · 6852 阅读 · 1 评论 -
Android开发之Intent.Action 各种Action的常见作用
1 Intent.ACTION_MAINString: android.intent.action.MAIN标识Activity为一个程序的开始。比较常用。Input:nothingOutput:nothing activity android:name=".Main" android:label="@string/app_name"> i转载 2015-02-21 19:46:07 · 9303 阅读 · 0 评论