
Android基础知识
JeffCoding
热爱移动互联网,热爱安卓,热爱Java
展开
-
Netty实现服务器推Push(Android推送)
简介消息推送一般的思路就是: 1.轮询(Pull)客户端定时的去询问服务器是否有新消息需要下发;确点很明显Android后台不停的访问网络费电还浪费流量。2.推送(Push)服务端有新消息立即发送给客户端,这就没有时间的延迟,消息及时到达。当时需求过来之后就首先考虑的这两个,开发的角度Pull实现起来简单省事,但从用户来说省电和省流量才是主要的,所以最后选用Push。客户端与服务端使用长连接,客户原创 2017-04-12 21:23:08 · 14968 阅读 · 11 评论 -
Android Touch事件传递机制解析
开篇语:最近程序在做一个小效果,要用到touch,结果整得云里面雾里的,干脆就好好把android touch机制好好看了一下,呵呵。。android系统中的每个ViewGroup的子类都具有下面三个和TouchEvent处理密切相关的方法:1)public boolean dispatchTouchEvent(MotionEvent ev) 这个方法用来分发To转载 2016-07-23 11:37:59 · 409 阅读 · 0 评论 -
Hongyang自定义View4 音量调节 内切圆图
随手画了一下,当记录。Android 自定义View (四) 视频音量调控原创 2016-07-22 18:45:09 · 1079 阅读 · 3 评论 -
TypedValue.applyDimension的用法和转换的真相
很经常用到TypedValue.applyDimension这个方法,之前自己没有去看源码,趁现在看了源码分析记录一下。TypedValue.applyDimension是一个将各种单位的值转换为像素的方法用法TypedValue.applyDimension(int unit, float value,DisplayMetrics metrics) 例子: TypedValue.原创 2016-07-22 15:26:40 · 6349 阅读 · 0 评论 -
RecyclerView添加Header和Footer
转自:http://blog.csdn.net/leejizhou/article/details/50742544RecyclerView虽然作为ListView的替代者有着较好的性能提升,但是ListView的一些常用功能却没有提供,比如我们平时会经常用到的addHeaderView,addFooterView,既然RecyclerView没有提供这个方法,我们应该如何为列表添转载 2016-06-04 23:20:37 · 2174 阅读 · 1 评论 -
Android DiskLruCache完全解析,硬盘缓存的最佳方案
转自:http://blog.csdn.net/guolin_blog/article/details/28863651概述记得在很早之前,我有写过一篇文章Android高效加载大图、多图解决方案,有效避免程序OOM,这篇文章是翻译自Android Doc的,其中防止多图OOM的核心解决思路就是使用LruCache技术。但LruCache只是管理了内存中图片的存储与释放,如果图片从转载 2016-05-06 21:53:27 · 354 阅读 · 0 评论 -
Android Context完全解析,你所不知道的Context的各种细节
转自郭霖大神:http://blog.csdn.net/guolin_blog/article/details/47028975前几篇文章,我也是费劲心思写了一个ListView系列的三部曲,虽然在内容上可以说是绝对的精华,但是很多朋友都表示看不懂。好吧,这个系列不仅是把大家给难倒了,也确实是把我给难倒了,之前为了写瀑布流ListView的Demo就写了大半个月的时间。那么本篇文章我们就讲转载 2016-05-05 00:10:46 · 590 阅读 · 0 评论 -
Fragment小技巧——几乎可以通用的fragment创建方法
我们在使用fragment时,当所需的fragment比较多的时候,创建fragment的代码就会重复,这时我们就可以把它封装起来。public abstract class SingleFragmentActivity extends FragmentActivity { protected abstract Fragment createFragment(); @Ov原创 2016-05-04 22:35:32 · 2950 阅读 · 0 评论 -
Android图片墙实现
在学习了郭霖大神的Android高效加载大图、多图解决方案,有效避免程序OOM 之后,又跟着郭大神学习了照片墙的实现Android照片墙应用实现,再多的图片也不怕崩溃 使用缓存技术使得加载图片避免了OOM(Out Of Memory),下面是做此次照片墙的思路和记录第一步:定义图片数据源第二步:编写主界面布局,使用GridView第三步:编写每一个item的布局,使用Ima原创 2016-05-02 10:51:41 · 751 阅读 · 0 评论 -
Android高效加载大图、多图解决方案,有效避免程序OOM
有幸看到郭霖大神的此篇博文,郭大神写得非常好,总结得也好,没有废话,也不需要自己去总结了,以后需要时再看多几次,因此mark一下转自:http://blog.csdn.net/guolin_blog/article/details/9316683高效加载大图片我们在编写Android程序的时候经常要用到许多图片,不同图片总是会有不同的形状、不同的大小,但在大多数情况转载 2016-05-02 10:27:02 · 422 阅读 · 0 评论 -
FragmentPagerAdapter刷新数据原理分析与解决
我在做一个页面的时候,viewpager + 3个fragment来实现,因适配器是使用FragmentPagerAdapter。后来我发现一个问题,当我离开这个界面,再重新进入的时候,这个界面的数据没有刷新。用平常的adapter刷新数据的方法对此没有效果,我想肯定是instantiateItem()方法有问题,于是我就看看FragmentPagerAdapter的源码。instantiat原创 2016-07-24 00:18:54 · 2276 阅读 · 2 评论 -
Android实现两次点击后退键退出程序
原理:利用onKeyDown方法截获后退键点击事件,然后对两次的点击时间差进行判断。@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK){ if((System.currentTimeMillis原创 2016-07-31 23:46:28 · 380 阅读 · 0 评论 -
社区(OkCommunity)Android 通讯app开发简介
前言在7月中旬的时候,突然想做一个上线的app,同时也巩固一下自己的android开发知识。于是开始动手坐了起来,终于在8月5号左右的时间,完成了历时20多天整个app的开发。我个人觉得,这个app虽不能说做得很好,但也是对我3个月的安卓学习的一个总结,当我发到论坛上,想听听其他开发人员的建议和评价时,另外意外的是,基本评论的都是好评。但与此同时,我也发现有很多android的初级学习者,看完第一行原创 2016-10-01 16:55:06 · 2118 阅读 · 5 评论 -
AIDL实现跨进程通信
AIDL是Android接口定义语言的意思,它可以用于让某个Service与多个应用程序组件之间进行跨进程通信,从而可以实现多个应用程序共享同一个Service的功能。首先先写具体的步骤: ### 实现方法 ### 例:用 A程序去访问 B程序的MyService.java服务1. 在B中建立AIDL文件MyAidlService.AIDL,在AIDL文件里写我原创 2016-07-29 10:53:42 · 625 阅读 · 0 评论 -
Glide加载圆形image第一次显示占位图的原因
一些解决方案1.如果你刚好使用了这个圆形Imageview库或者其他的一些自定义的圆形Imageview,而你又刚好设置了占位的话,那么,你就会遇到第一个问题。如何解决呢?方案一: 不设置占位;方案二:使用Glide的Transformation API自定义圆形Bitmap的转换。这里是一个已有的例子;方案三:使用下面的代码加载图片:Glide.with(mConte原创 2016-08-02 19:23:19 · 8912 阅读 · 4 评论 -
Android 软键盘遮挡的四种解决方案
在编辑框输入内容时会弹出软键盘,而手机屏幕区域有限往往会遮住输入界面,我们先看一下问题效果图: 输入用户名和密码时,系统会弹出键盘,造成系统键盘会挡住文本框的问题,如图所示: 输入密码时输入框被系统键盘遮挡转载 2016-08-10 18:15:46 · 967 阅读 · 0 评论 -
让多个Fragment 切换时不重新实例化
在项目中需要进行Fragment的切换,一直都是用replace()方法来替换Fragment:123456789public void switchContent(Fragment fragment) { if(mContent != fragment) { mContent = fragment; mFragmentMan.转载 2016-08-10 18:17:20 · 625 阅读 · 0 评论 -
为Button设置选择器
原创 2016-08-10 18:28:40 · 1029 阅读 · 0 评论 -
ListView的动态刷新问题——用notifyDataSetChanged没作用
也许很多开发的朋友,尤其是Android初学者,在动态刷新ListView时,使用notifyDataSetChanged并没有起到作用。有时会被困扰得很痛苦。其实,在使用notifyDataSetChanged过程中,还是有细节需要注意的。举个例子:我的ListView使用的数据源是来自ArrayList。通常我们的做法是创建一个已经有我们想要提供给ListView的数据的Arr转载 2016-08-10 18:08:38 · 732 阅读 · 0 评论 -
Android版本检测更新
最近看到有一篇文章,主要写Android如何检测版本更新,但有点无语,其实挺简单的问题,被说的如此复杂。于是想记录下来,希望能帮到需要的人。检测版本更新的思路:1.首先获取现app的versionCode,然后跟服务器返回的versionCode对比,若小于服务器的versionCode,则说明有新版本了,需要更新了。2.服务器提供新版本的apk地址,共客户端进行下载安装。原创 2016-08-10 17:53:04 · 1134 阅读 · 0 评论 -
Android设置EditText只能输入字母和数字
一般来说当需要输入账号密码时,便限定只能输入字母和数字。那可以对EditText进行设置:android:inputType="number"android:digits="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"在xml中对EditText进行设置一般来说就可以了原创 2016-08-10 18:00:22 · 7507 阅读 · 0 评论 -
Android Volley网络通信框架的使用(二):Volley加载网络图片
上一篇我们已经说过了加载网络图片的一个方法,ImageRequest,使用起来很简单,但是接下来我要说更加高效,更加有用的一些方法。一:ImageLoader的使用imageLoader内部也是基于ImageRequest的,但是,相对于ImageRequest来说,他高效在哪里?它能够对请求的图片进行缓存,并且会帮我们过滤掉重复的链接请求。imageLoader不是继承自Re原创 2016-05-01 21:35:53 · 640 阅读 · 0 评论 -
Android Volley网络通信框架的使用(一):Volley的简单用法
我们在andorid开发时,基本都是要使用网络通信,网络通信中,HttpURLConnection,HttpClient这两个类很常见,基本上有网络通信的地方就有他们,但是当我们多次使用时,这两个类还是比较复杂的,特别是HttpClient,因此Volley就应运而生了。除了简单易用之外,Volley在性能方面也进行了大幅度的调整,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络原创 2016-05-01 21:09:53 · 824 阅读 · 0 评论 -
Android智能机器人
今天做了一个智能聊天机器人,其实相对比较简单,用到的知识点如下:1.listView的熟练使用2.第三方API的调用,发送数据请求和返回数据解析3.网络请求时使用的异步任务和Handler不过学会了之前没有接触的东西,在IDE里测试工具类,写完工具类测试是一个好习惯public class HttpUtil { private static final Strin原创 2016-04-30 23:12:20 · 609 阅读 · 0 评论 -
android的上下文菜单和上下文操作模式
例如长按删除功能就是一种上下文操作,上下文操作与某个特定的屏幕视图(单个列表项)而非整个屏幕相关联一:在res/menu下新建菜单资源文件 <item android:id="@+id/menu_item_delete_crime" android:icon="@android:drawable/ic_menu_delete" an原创 2016-03-09 23:50:05 · 1559 阅读 · 0 评论 -
层级式导航返回到特定activity
启用了应用图标的导航功能,利用ActionBar()的setDisplayHomeAsUpEnabled(true)让应用图标转变为回退按钮当我们要利用这个导航功能,也是通过覆盖Fragment的onOptionItemSelected(MenuItem item),并在方法体内实现返回activity的功能。public boolean onOptionsItemSelected(Men原创 2016-03-07 23:25:26 · 1367 阅读 · 0 评论 -
Fragment的生命周期
今天在重写Fragment的生命周期时,给onCreate()和onResume()等生命周期方法修饰protected,程序报错。翻阅资料发现,因为需要被托管Fragment的任何Activity调用,因此Fragment的生命周期方法必须修饰为public。我的理解是,当托管Fragment的activity和Fragment不在同一个包中时,protected的存在就使得Activi原创 2016-03-03 23:50:00 · 384 阅读 · 0 评论 -
ListView在Activity和Fragment中的显示和使用
一:在Fragment中显示ListView1.在Fragment中显示ListView,主要用到ListFragment这个类,新建一个类继承ListFragment,ListFragment内置了ListView,所以无需覆盖Fragment的onCreateView()方法或者为Fragment生成一个带有ListView的布局,ListFragment默认实现 一个全屏ListVi原创 2016-03-02 22:24:33 · 7868 阅读 · 0 评论 -
关于项目中时常遇到的R资源出错问题
不过, 有时这些编译错误会一直出现或是出现得莫名其妙。 如遇这种情况, 请尝试如下操作。1. 运行Android Lint 选择Window → Run Android Lint菜单项。Lint会检查并梳理项目资源文件。2. 清理项目 选择Project → Clean菜单项。Eclipse会重新编译整个项目,消除错误。3. 重新检查资源文件中XML文件的有效性原创 2016-02-22 19:51:49 · 1778 阅读 · 0 评论 -
Android项目旋转屏幕数据丢失的原因及解决
今天在做项目的时候,不小心旋转了屏幕,发现活动回到了刚create的时候,重新创建了activity,数据同时也丢失了。原因:这是因为应用在运行中设备配置(包括屏幕的方向、屏幕的密度、屏幕的尺寸、键盘类型、底座模式以及语言等)一旦发生变化,Android就会销毁当前的活动,新建活动。解决方法:1.旋转屏幕会导致视图发生变化,因此,在res下面新建一个layout-land包,复制lay原创 2016-02-22 19:37:18 · 2354 阅读 · 0 评论 -
如何创建.gitignore文件
今天遇到一个问题,git不知道怎么创建.gitignore文件。具体步骤如下:1. 在需要创建 .gitignore 文件的文件夹, 右键选择Git Bash 进入命令行,进入项目所在目录。2. 输入 touch .gitignore 在文件夹就生成了一个“.gitignore”文件。然后在”.gitignore” 文件里输入你要忽略的文件夹及其文件就可以了。3.然后转载 2016-02-11 22:39:25 · 15645 阅读 · 0 评论 -
关于安卓的广播机制Broadcast
一:广播的注册广播作为安卓四大组件之一,自然也要注册。广播的注册分为动态注册和静态注册。动态注册:IntentFilter intentFilter = new IntentFilter();//获得IntentFilter的实例intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");//监听android.ne原创 2016-02-11 21:26:51 · 672 阅读 · 0 评论 -
安卓Notification.Builder的使用
通知的基本用法一般步骤为:1.调用Context的getSystemService()方法获得NotificationManager进行管理;2.实例化Builder;3.设置Builder的参数,即对通知的布局进行设定;4.设置PendingIntent;5.调用NotificationManager的notify()让通知显示出来。以下为百度查找的资料:原创 2016-02-11 12:30:48 · 1093 阅读 · 0 评论 -
android的选项菜单
一:首先要在res/menu下创建menu资源类型的xml文档 <item android:id="@+id/menu_item_new_crime" android:icon="@android:drawable/ic_menu_add" android:title="@string/new_crime" an原创 2016-03-09 23:25:45 · 619 阅读 · 0 评论 -
隐式intent调用大全
Java代码 Uri uri = Uri.parse(""); Intent it = new Intent(Intent.ACTION_VIEW,uri); startActivity(it); //显示某个坐标在地图上Java代码 Uri uri = Uri.parse("geo:38.899533,-77.036转载 2016-03-14 22:55:08 · 757 阅读 · 0 评论 -
Android属性动画(二):深入valueAnimator和objecAnimator
ValueAnimator的高级用法无论是valueAnimator还是objectAnimator都离不开TypeEvaluator的使用,那TypeEvaluator是用来干嘛的?TypeEvaluator是用来告知动画系统如何从开始值过渡到结束值,例如上一篇文章中使用的valueAnimator的offInt()的实现,其实就是内置了一个TypeEvaluator来实现的。接原创 2016-04-26 12:47:15 · 596 阅读 · 0 评论 -
Android属性动画(一):ValueAimator和ObjectAnimator的基本使用
补间动画在属性动画之前,有补间动画(Animation类)供我们使用,为什么有了补间动画还要属性动画?1.补间动画只能对view进行操作,有很大的局限性2.补间动画只能实现移动,缩放,旋转,淡进淡出,其他的效果很难做到3.补间动画只是改变了view的显示效果,而没有改变view的属性,这是很致命的属性动画1.ValueAimatorValueAimator是一种原创 2016-04-25 10:35:17 · 1347 阅读 · 0 评论 -
通讯软件秘密开发笔记
开发比较大规模的软件的思路:创建工程-搭建工程框架-界面设计-基类设计-逻辑设计-调试-上传一:搭建工程框架秘密需要实现的功能如下:1.发送验证码2.输入手机号和验证码登录3.显示朋友圈4.点击某条朋友圈进入评论列表5.发表评论6.发表朋友圈二:基类设计1.要联网因此要指定一个网络通讯基类网络请求是一个耗时动作,因此使用AsyncTask,在do原创 2016-04-23 11:33:50 · 483 阅读 · 0 评论 -
仿微信语音功能的流程
当我们要做一个仿微信的语音功能时,我们要想一想,微信的语音功能的效果是怎样的?1.当我们按下录音按钮时,开始录音,显示一个正在录制的dialog2.如果按下按钮,在很短的时间内松开手指,而没有录制成功,显示一个录音时间过短的dialog3.如果按下按钮,滑出按钮范围,例如按住上滑,录音取消,显示一个取消发送的dialog4.松开手指,录制结束,并且录音显示在listView中大原创 2016-03-24 21:00:00 · 2508 阅读 · 0 评论 -
安卓开发——服务用法
服务是安卓四大组件之一,既然组件之一,我们首先想到的肯定是组件要在androidManifest中注册。定义服务:新建类继承Service类,并重写onCreate()服务创建时调用,onStartCommand()服务开启时调用,onDestroyed()服务销毁时调用,onBind()服务与活动交 互时调用开启服务:startService(转载 2016-03-20 09:53:18 · 577 阅读 · 0 评论