Android进阶
文章平均质量分 87
李过饰非
如果你不想考第一名而只是一个中等成绩即可,那么结果可能你最后得到的是倒数。
展开
-
RemoteViews完全解析
一、概述什么是RemoteViews?从字面意思可以理解为远程View。需要注意的是,RemoteViews并不是View的子类,它是Object的子类。它的作用是可以跨进程更新界面,是不是功能很强大?它在实际应用中主要在通知栏和桌面小控件,下面就全部基于通知栏来分析。二、演示三、RemoteViews在通知栏上的应用定义了两个按钮,分别用来发送不同的通知 <LinearLayout xml原创 2016-07-10 14:40:49 · 7102 阅读 · 0 评论 -
自定义View(三)---分析JazzViewPager
一、概述JazzViewPager是什么?它其实是一种自定义View,继承ViewPager,普通v4包提供的ViewPager只能完成一些2d,的效果,如果想要完成更加酷的效果肯定需要我们自己设置(动画)。二、Demo例子xml文件:<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmln原创 2016-07-09 01:40:47 · 6864 阅读 · 0 评论 -
WindowManager的分析
一、Window和WindowManagerWindow:表示一个窗口,从下面Window的源码中可以看出它有且只有一个实现类PhoneWindow。 The only existing implementation of this abstract class is * android.policy.PhoneWindow, which you should instantiat原创 2016-07-22 00:31:08 · 3928 阅读 · 1 评论 -
HandleThread的分析
一、HandleThread的分析从名称就可以看出,HandleThread是Handle和Thread的‘结合’,但它本质上还是个Thread。 public class HandlerThread extends Thread 既然它是一个线程, 那么我们就看看它的run方法 @Override public void run() { mTid = P原创 2016-08-02 06:47:23 · 2701 阅读 · 0 评论 -
Picasso源码初步分析
Picasso工作原理我们知道使用Picasso最简单的方式来显示一张图片的方法就是如下了 Picasso.with(this).load("http://192.168.56.1:8080/1.jpg").into(iv) ;我们就从Picasso.with(this)这句话开始分析,虽然只是简单的一句代码,但是里面的含义却不少,看源码: public static Picass原创 2016-08-02 06:57:28 · 1932 阅读 · 0 评论 -
自定义View(四)--自定义ScrollView
前言今天上课太过无聊,就写了个自定义view-ScrollView,比较简单。代码 public class MyScrollView extends ScrollView { // 用来记录位置信息&判断是否需要执行动画 private Rect rect = new Rect() ; // 表示可以拖动屏幕的部分 private int count = 5 ;原创 2016-08-31 13:15:19 · 443 阅读 · 0 评论 -
Retrofit中解析XML
一、概述retrofit框架现在用的越来越多,它主要集成了OkHttp、json等一些优秀框架,关于Retrofit解析json相信大部分人都会,但是如果是XML呢,那么这篇博客就来学习如何来解析XML。二、解析XML1、首先,定义一个xml格式的字符串,这里我就写在本地了。 String xml = "<Citys>\n" + "\t<city>\n" +原创 2016-09-15 10:58:22 · 4207 阅读 · 2 评论 -
Activity启动源码分析
一、概述Activity作为Android四大组件之一,也是我们平时开发中使用的最多的组件,相信大家已经了解了它的基本使用,那么是否知道Activity的onCreate()、onStart()、onResume()方法是什么时候调用的呢?接下来就从源码角度来分析Activity的工作原理二、从main()方法源码开始分析我们知道每一个程序都有一个入口,类似于c语言中的入口是main()方法一样,A原创 2016-08-14 13:26:46 · 1516 阅读 · 0 评论 -
不会缓存的ViewPager的Demo
使用LazyViewPager完成的一个左右缓存的简单Demo我的java代码 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState)原创 2016-10-31 20:55:30 · 864 阅读 · 0 评论 -
Fragment总结
零、前言今年可能要实习了,准备把之前学过的知识点重头开始回顾下,不学习新东西了,这篇讲Fragment。一、生命周期onAttach(Activity activity)当Fragment第一次被添加到宿主Activity上时调用。onCreate(@Nullable Bundle savedInstanceState)初始化Fragment时调用,调用时期:在onAttach()方法之后,在onC原创 2017-02-16 18:46:18 · 1380 阅读 · 0 评论 -
Warning:Conflict with dependency 'com.google.code.findbugs:jsr305'. Resolved versions for app 异常
项目写着写着突然报这个错误Warning:Conflict with dependency ‘com.google.code.findbugs:jsr305’. Resolved versions for app 异常解决方法:在build.gradle添加下面代码configurations.all { resolutionStrategy.force 'com.google.code.原创 2017-02-17 20:32:15 · 1903 阅读 · 0 评论 -
ToolBar报错:AppCompat does not support the current theme features
一、问题当使用actionbar并且又没有改变style的时候就会报如下错。 java:@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main原创 2017-01-31 14:24:59 · 586 阅读 · 0 评论 -
Android Stdio中使用lambda
一、前言Android Stdio默认情况下,即使你使用的是jdk8也会报错,要是想在as中使用lambda,必须借用一个插件retrolambda。该插件将java 8中的lambda表达式特性兼容到java 5二、安装插件第一步、在项目的根目录下的build.gradle中加入如下代码classpath 'me.tatarka:gradle-retrolambda:3.2.0'整个文件内容为:/原创 2017-01-31 20:11:07 · 376 阅读 · 0 评论 -
报错:The specified child already has a parent. You must call removeView
一、原因一般出现这种问题的原因都是因为你之前给一个view添加了一个莫名的父view而自已还未发现,而后后来又添加了一次,因此导致出现了问题二、例子 @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater原创 2017-02-02 12:35:37 · 900 阅读 · 0 评论 -
进程间通信之Messenger
一、概述Android中谈进程间通信肯定是要提AIDL,而Messenger底层就是运用了AIDL,对AIDL做了简单封装。但是它和AIDL又有些不同,Messenger利用了Handler处理通信,所以它是线程安全的(不支持并发处理);而AIDL不是线程安全的(支持并发处理)。二、简单入门这里,写两个apk,一个作为client,一个座位server。 服务端代码: 创建service://处原创 2016-06-18 11:48:58 · 692 阅读 · 0 评论 -
序列化的两种方式
一、概述Android中Intent传递对象有两种方式,这两个对象分别实现了Parcelable、Serializable两个接口。bundle.putSerializable(key, value)bundle.putParcelable(key, value);1.Serializable特点:Serializable是JavaSe的接口,在序列化的时候会产生大量的临时变量,从而容易引起频繁的G原创 2016-06-17 23:11:18 · 1582 阅读 · 0 评论 -
设计模式--单例模式
一、概述今天学习SpringMVC的时候,注意到Controller是一个单例模式,虽然是最简单的设计模式,但是发现自己对其并没有太多了解,于是准备学习下。二、单例模式的五种形式分析注意下,这里提到的5种形式并不是说单例模式只有这5种模式,而是我通过查找资料总结出来的。1、饿汉式(不推荐)代码如下: /** * 饿汉式 */ class SingletonDem原创 2016-07-14 19:35:11 · 642 阅读 · 1 评论 -
EventBus的初级使用
最近在群里经常听到关于EventBus,于是也准备学习学习。在学习EventBus之前,我们应该知道这几点:一、概述 什么是EventBus,EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener原创 2016-06-13 16:19:38 · 536 阅读 · 0 评论 -
Android之Matrix学习(一)
使用Matrix实现图片移动和多点触摸一、什么是Matrix?其实在Android中Matrix本质是一个3*3的矩阵 Matrix包括的图形处理包括以下4种。 -Translate 平移变换 -scale 缩放变换 -rotate 旋转变换 -skew 错切变换 前面三个比较容易理解,有点类似于动画中的变化,就不做介绍了,最原创 2016-06-13 14:07:06 · 654 阅读 · 1 评论 -
ThreadLocal的简单入门使用
1.概述JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序,ThreadLocal并不是一个Thread,而是Thread的局部变量。2多说无益,上代码简单实现在不同线程获取不同值的小Demopublic static final ThreadLocal<Stri原创 2016-06-14 01:48:00 · 1257 阅读 · 0 评论 -
ThreadLocal的源码分析
概序如果你还不知道ThreadLocal是什么东西,请看上一篇 ThreadLocal的快速入门 这篇将会讲到ThreadLocal的一些api,然后从源码分析ThreadLocal的工作原理,关于ThreadLocal的使用场景比较少,比如Loop、ActivityThread、ActivityManagerServiceThreadLocal的4个常用apiinitialValue() :原创 2016-06-14 13:41:05 · 558 阅读 · 0 评论 -
Android消息机制初步分析
1.概序说到Android中的消息机制,大家肯定不会陌生,从开发的角度来说,Handler是Android的上层借口,我们在开发中只需要和Handler交互就行了。消息机制中的几个重要概念MessageQueue:见名知义,消息队列,内部存储了一组消息,以队列的形式提供添加删除的工作,底层是采用单链表的数据结构来存储消息列表的。Looper:见名知义,循环。消息队列只是一个存储的地方,但是不能处原创 2016-06-14 16:27:43 · 495 阅读 · 0 评论 -
Handler、Looper、MessageQueue源码分析
一、概绪如果还不清楚Handler、Looper、MessageQueue对象的,请看我的上一篇Android消息机制初步分析,这篇将会从源码的角度来分析Handler、Looper、MessageQueue这三个对象的工作原理。二、三个重要对象1.MessageQueue:工作原理:MessageQueue主要是通过enqueueMessage和next方法完成消息的插入和删除。enqueue原创 2016-06-14 18:20:56 · 610 阅读 · 0 评论 -
Android性能优化之布局优化
一、概绪随着应用的增加,功能越来越复杂,布局也随着越来越丰富,这也成为应用流畅运行的一个阻碍。因此,这篇博客主要就布局优化来学习学习优化方案。二、.常见的布局优化方案有避免Overdraw(重复绘制):重复绘制会过分的浪费很多的CPU。例如:Android系统默认会会绘制Activity背景,如果我们再手动设置背景就会导致重复绘制。在Android系统中的开发者选项中有个检测工具—“Enable原创 2016-06-14 23:36:26 · 1876 阅读 · 0 评论 -
Socket编程基础--基于TCP协议的网络编程
一、概述在学习TCP协议之前,需要了解网络编程中的几个基本概念。IP协议:是Internet Protocol的外语缩写,为计算机网络相互连接进行通信而设计的协议。在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。任何厂家生产的计算机系统,只要遵守IP协议就可以与因特网互连互通。IP地址具有唯一性。TCP协议:TCP协议被称作是原创 2016-06-15 18:36:15 · 799 阅读 · 0 评论 -
Android性能优化之内存优化
一、概述在前面一篇博客整理了Android性能优化之内存优化,这篇就整理整理内存优化方面的知识1.简介RAM(random access memory)随机存取存储器。分为下面5种寄存器存储:速度最快。因为寄存器位于处理器内部,我们程序无法控制。栈(stack):存放的是基本数据类型(注意String不是基本数据类型)和引用。对象本身不存储在栈中,而是存储在堆中。堆(Heap):存放的是new原创 2016-06-16 00:05:53 · 418 阅读 · 0 评论 -
Android动画完全解析--属性动画
一、概述上篇博客介绍了View动画的简单使用和基本工作原理原理,这篇来学习下属性动画。和View动画不同的是,属性动画不再简单的使用平移、旋转、缩放、透明度这4种变换,代替它们的是ValueAnimator、ObjectAnimator等概念。二、运行截图三、TimeInterpolator和TypeEvaluator在真正学习属性动画之前,我们需要理解TimeInterpolator和TypeEv原创 2016-07-14 00:12:58 · 3290 阅读 · 2 评论 -
Android动画完全解析--View动画
一、View动画1、常见的4中View动画:AlphaAnimation、ScaleAnimation、TranslateAnimation、RotateAnimation使用动画的方式有两种:一种是xml形式、另一种是java代码。使用起来都比较简单。还有一种AnimationSet,它是动画集合,将几种动画合在一起使用,下面AnimationSet来写动画。创建缩放/透明动画 //创建A原创 2016-07-12 17:16:00 · 2373 阅读 · 4 评论 -
自定义View(一)
一、了解ViewRoot和DecorView1.ViewRoot从源码可以看出ViewRoot是ViewParent的实现类public final class ViewRoot extends Handler implements ViewParent,ViewRoot对应于的ViewRootImp也是ViewParent的实现类public final class ViewRootImpl原创 2016-07-03 17:06:45 · 3114 阅读 · 0 评论 -
自定义View(二)
一、概述在上一篇分析了自定义View的基础知识,如果还是不清楚自定义View的请看上篇博客自定义View(一)。这篇主要是一个自定View的一个简单实例—-一个时钟效果。运行如下。其实这个效果之前写过一篇网页版的,利用HTML5的context写的,有兴趣的可以看看。简单分析下: 由图可以看出这个自定义View由一个圆,3个指针直线,然后就是断直线了,至于它的自动走动可以用post系列方法重复调用原创 2016-07-03 23:57:24 · 448 阅读 · 0 评论 -
MySql和Oracle函数总结
一、 前言今天写项目的时候遇到了比较复杂的sql,用到了sql函数,于是准备把其总结起来,以后方便查看,并且不断更新。。。二、MySql1、ifnull(expr1,expr2):判断第一个参数是否为null,如果是null,则返回第二个值。对应Oracle中的nvl函数。SELECT IFNULL(NULL, 1 ) ; // 返回 1SELECT IFNULL(0 , 1 ) ; // 返回原创 2017-04-25 19:49:24 · 642 阅读 · 0 评论