安卓开发
湘下农人
尽力而为还是全力以赴
展开
-
谈Kotlin
简洁的语法Kotlin给我的感觉就是它就是针对Java里所有的痛点来做改变的,比如语法繁琐,烦人的空指针,缺少函数式编程支持(Java8虽然支持Lambda表达式但还远远不够)等等。不像它的孪生兄弟Scala那样奔放,Kotlin给我的感受是聪明又克制,对Java程序员来说半天就足够上手开干了,不像Scala门槛那么高。Java语言是我所接触过语言中语法最繁琐的(有更繁琐的请告知),这种繁...转载 2019-08-17 18:10:28 · 491 阅读 · 0 评论 -
ViewPager详解之初识ViewPager
一、ViewPager1、概述ViewPager继承自ViewGroup,是左右两个屏幕平滑地切换的一个容器,容器里呈现的视图由对应的Adapter决定,和其他标准的AdapterView类似。简而言之就是我们通过Adapter把View放到ViewPager里,动动手指我们就可以实现左右滑动互相切换View了。另外ViewPager的更新不是直接由ViewPager本身去完成的,而是通过...转载 2018-08-22 21:07:44 · 212 阅读 · 0 评论 -
客户端开发单选题
使用JavaScript向网页中输出<h1>hello</h1>,以下代码中可行的是<script type="text/javascript"> document.write("<h1>hello</h1>"); </script><h1> <s原创 2018-08-22 17:17:46 · 786 阅读 · 0 评论 -
模块化到组件化再到插件化
控制反转,依赖注入:耦合结构和解耦结构目前我的项目的结构如下图所示,因为intent跳转和一些数据共享的关系导致的。 解耦合之后的结构: 解耦思想控制反转是一种思想依赖注入是一种设计模式IoC框架使用依赖注入作为实现控制反转的方式 模块化开发将一个程序按照其功能做拆分,分成相互独立的模块,以便于每个模块只包含与其功能相关的内容。模块我们...转载 2018-08-16 21:42:36 · 4092 阅读 · 0 评论 -
Bitmap的复制和软引用
Bitmap是不能通过“ A = B ”来传递的,这样只是把B的引用给了A而已 复制有两个方法: 第一:copy方法: 根据该位图的大小产生一个新位图,根据指定的结构设置新位图的结构,然后把位图的像素拷贝到新位图中。如果不支持该转换,或者分配内存失败,那就返回NULL。返回的位图和原图有同样的像素密度。 参数 config 结果图预期的结构; isMutable ...转载 2018-08-16 09:48:22 · 8547 阅读 · 0 评论 -
Bundle类
1.新建一个Bundle类 Bundle bundle=new Bundle();2.Bundle类中放入数据(key-value的形式,另一个Activity里面取数据的时候,通过key值找出对应的value值) bundle.putString("key" ," value");3.新建一个intent对象,并将该bundle加入到这个intent对象 Intent inten...转载 2018-08-14 17:31:06 · 174 阅读 · 0 评论 -
okhttp同步和异步请求的区别
一、使用OkHttpOkHttp发送请求后,可以通过同步或异步地方式获取响应。下面就同步和异步两种方式进行介绍。1.1、同步方式发送请求后,就会进入阻塞状态,知道收到响应。下面看一个下载百度首页的例子: OkHttpClient client = new OkHttpClient.Builder().readTimeout(5, TimeUnit.SECONDS).bu...转载 2018-07-22 15:43:48 · 6421 阅读 · 0 评论 -
git将项目上传到github(最简单方法)
我们使用git需要先安装git工具,这里给出下载地址,下载后一路直接安装即可:https://git-for-windows.github.io/1.进入Github首页,点击New repository新建一个项目 2.填写相应信息后点击create即可 Repository name: 仓库名称Description(可选): 仓库描述介绍Public, Priva...转载 2018-07-26 21:10:03 · 148 阅读 · 0 评论 -
VelocityTracker
android.view.VelocityTracker主要用跟踪触摸屏事件(flinging事件和其他gestures手势事件)的速率。用addMovement(MotionEvent)函数将Motion event加入到VelocityTracker类实例中.你可以使用getXVelocity() 或getXVelocity()获得横向和竖向的速率到速率时,但是使用它们之前请先调用comput...转载 2018-07-30 11:12:52 · 173 阅读 · 0 评论 -
Notification之----任务栈
概述Notification大家肯定不会陌生,并且使用方式也十分简单明了,使用场景也相对单一,所以除了基础用法外,可能不会有太深入的了解,这篇文章主要讲一下通知中比较冷门却十分有用的使用方式,TaskStackBuilderTaskStackBuilder那什么是TaskStackBuilder?首先,TaskStackBuilder在android.app和android.sup...转载 2018-07-21 22:29:34 · 218 阅读 · 0 评论 -
Java数组初始化
1.Java 数组初始化的两种方法: 静态初始化: 程序员在初始化数组时为数组每个元素赋值; 动态初始化: 数组初始化时,程序员只指定数组的长度,由系统为每个元素赋初值。 public static void main(String[] args) { //静态初始化数组:方法一 String cats[]...转载 2018-07-21 22:03:03 · 148 阅读 · 0 评论 -
Theme在Dailog中的使用
注意:自定义的dialog可以如下图一样AlertDialog.Builder的构造器,如果Dialog是自定义的,那么一定要在自定义里面构造器中传入int theme,然后构造器super(context,theme); AlertDdialog.Builder builder = new AlertDialog.Builder(DialogActivity.this,AlertDial...转载 2018-07-21 19:54:55 · 1318 阅读 · 0 评论 -
调用 FragmentPagerAdapter.notifyDataSetChanged() 并不能更新其 Fragment?
【ViewPager】 ViewPager 如其名所述,是负责翻页的一个 View。准确说是一个 ViewGroup,包含多个 View 页,在手指横向滑动屏幕时,其负责对 View 进行切换。为了生成这些 View 页,需要提供一个 PagerAdapter 来进行和数据绑定以及生成最终的 View 页。 setAdapter() ViewPager 通过 set...转载 2018-07-21 09:08:17 · 277 阅读 · 0 评论 -
Android——Runtime类中的freeMemory,totalMemory,maxMemory等几个方法
maxMemory()这个方法返回的是java虚拟机(这个进程)能构从操作系统那里挖到的最大的内存,以字节为单位,如果在运行java程序的时 候,没有添加-Xmx参数,那么就是64兆,也就是说maxMemory()返回的大约是64*1024*1024字节,这是java虚拟机默认情况下能 从操作系统那里挖到的最大的内存。如果添加了-Xmx参数,将以这个参数后面的值为准,例如java -cp Cl...转载 2018-08-27 10:19:51 · 1477 阅读 · 0 评论 -
解决ViewPager中调用FragmentPagerAdapter.notifyDataSetChanged() 不能更新数据以及删除某个页面后显示错乱的问题
在instantiateItem方法中会通过container.getID()和getItemId()结合起来作为tag寻找Fragment的缓存,如果有直接取,没有的话调用getItem来获取新的Fragment,一个ViewPager中的ID是不变的,所以我们需要每次更新getItemId()并根据它寻找需要更新的Fragment,增加或删除Fragment时也需要更新getItemId()...原创 2018-08-23 12:33:18 · 1174 阅读 · 0 评论 -
Android系统的下一个十年?
转载地址:https://juejin.im/user/5a96922b5188257a865da3f2/ 概述 /Android 系统从 2008 年正式发布到现在已经过去了 11 年,系统版本也来到了 10,作为开发者,或者作为用户,我们见证了系统一次次大大小小的改动,见证了系统的不断完善,见证了我们写的每个 Android 小程序给我们带来的成就感。但是,当...转载 2019-07-26 18:53:45 · 171 阅读 · 0 评论 -
Android 系统架构详解
引言本文作为Android系统架构的开篇,起到提纲挈领的作用,从系统整体架构角度概要讲解Android系统的核心技术点,带领大家初探Android系统全貌以及内部运作机制。虽然Android系统非常庞大且错综复杂,需要具备全面的技术栈,但整体架构设计清晰。Android底层内核空间以LinuxKernel作为基石,上层用户空间由Native系统库、虚拟机运行环境、框架层组成,通过系统调...转载 2019-04-12 14:01:25 · 11726 阅读 · 1 评论 -
Hybrid APP混合开发
1、混合开发概述Hybrid App主要以JS+Native两者相互调用为主,从开发层面实现“一次开发,多处运行”的机制,成为真正适合跨平台的开发。Hybrid App兼具了Native App良好用户体验的优势,也兼具了Web App使用HTML5跨平台开发低成本的优势。目前已经有众多Hybrid App开发成功应用,比如美团、爱奇艺、微信等知名移动应用,都是采用Hybrid App开发...转载 2018-10-27 15:02:26 · 423 阅读 · 0 评论 -
为什么应用程序在Android 7.0之后安装和运行都变得更快?
需要了解几个概念 Dalvik 虚拟机 负责解释dex文件为机器码,每次执行代码,都需要Dalvik将dex代码翻译为微处理器指令,然后交给系统处理,这样效率不高。 JIT(Just-In-Time) 为了解决上面的问题,Google在2.2版本添加了JIT编译器,当App运行时,每当遇到一个新类,JIT编译器就会对这个类进行编译,经过编译后的代码,会被优化成相...转载 2018-10-30 09:53:06 · 1014 阅读 · 0 评论 -
ImageView加载一张图片到底占据多少内存
1.简介 Android中经常要通过ImageView进行图片资源显示。在加载图片时,首先要考虑的两个因素就是体验问题和性能问题。 其中,体验问题是指图片显示的是否正确(例如Universal-Image-Loader在适配Adapter图片资源时会导致图片显示错位),分辨率是否合适等。而体验问题主要是指图片加载速度,以及更加重要的图片加载的内存占用问题。本文重点介绍I...转载 2018-09-19 17:26:09 · 1090 阅读 · 0 评论 -
ListView的复用和缓存机制及优化
1、复用分析**1. 在AbListView中 **/** * The data set used to store unused views that should be reused during the next layout * to avoid creating new ones */final RecycleBin mRecycler = new RecycleBin...转载 2018-09-13 17:33:28 · 333 阅读 · 0 评论 -
HybridApp解决方案_No1_混合模式(Hybrid)App开发概述
1.1. APP三种开发模式智能手机之普及不用多说,手机APP渗投到各个行业:电商(淘宝、京东等)、金融(各手机行业、P2P借贷等)、医疗(智慧医疗)、交通(滴滴、Uber等)、教育(慕课网等)、餐饮(饿了吗、美团等)……反正只要是个企业,无论规模大小,都已经订制或将要订制自己的APP。这么多APP无外乎就三种模式:Native App、Web App、Hybrid App。1.1...转载 2018-09-05 09:05:19 · 464 阅读 · 0 评论 -
内存溢出的解决思路
内存溢出是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能提供的最大内存。 引起内存溢出的原因有很多种,常见的有以下几种: 1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据; 2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收; 3.代码中存在死循环或循环产生过多重复的对象实体; 4.使用的第三方软件中的BUG;...转载 2018-08-30 16:00:22 · 792 阅读 · 0 评论 -
用java实现一个线程池(可以使用java的数据结构),需要满足可以往前或者往后插入task,可配置最大同时执行的线程数,并对线程池中当前同一个类型的连续task进行合并执行
在Android客户端上,用java实现一个线程池(可以使用java的数据结构),需要满足可以往前或者往后插入task,可配置最大同时执行的线程数,并对线程池中当前同一个类型的连续task进行合并执行(假设同一类型的task可以合并成一次执行)1. 可以往前或者往后插入task:使用LinkedBlockingQueue阻塞队列,该阻塞队列结构为双向链表,满足前后插入task2. 配置最大...转载 2018-08-21 20:25:35 · 374 阅读 · 0 评论 -
Activity有四种模式:standard(标准启动模式)、singleTop、singleTask、singleInstance
注: Aty1_1和Aty2_1为两个不同的Activity,Aty1_1和Aty1_2为同一个Activity中的不同实例。1. standard 不同的Activity在同一个栈中, 每次创建新实例的时候,新实例便会堆放到栈顶。 当点返回键的时候,便会从栈顶按顺序将实例移除栈。直至栈为空则退回到桌面。 2. singleTop ...转载 2018-09-03 12:10:39 · 1487 阅读 · 0 评论 -
RecyclerView设置分割线---DividerItemDecoration
官方提供的分割线处理方案,也是继承的RecyclerView.ItemDecoration实现的。divider.png用法很简单,注释里面有demo。同时也可以通过自定义drawable来实现divider的自定义。1.用系统提供的高度和颜色,不做自定义。DividerItemDecoration dec = new DividerItemDecoration(mContex...转载 2018-08-23 17:23:31 · 5596 阅读 · 0 评论 -
android app内存性能优化
内存简介: RAM(random access memory)随机存取存储器。说白了就是内存。一般Java在内存分配时会涉及到以下区域: 寄存器(Registers):速度最快的存储场所,因为寄存器位于处理器内部,我们在程序中无法控制栈(Stack):存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中堆(Heap):堆内存用来存放由new创建的对象和...转载 2018-08-27 17:16:35 · 531 阅读 · 0 评论 -
Android 启动页优化及过渡动画
一、APP的启动方式:一般来说,APP的启动方式主要分为两种:冷启动和热启动。冷启动:启动应用时,后台没有该应用的进程,系统会重新创建一个新的进程分配给该应用,即冷启动; 热启动:启动应用时,后台已有该应用的进程(例如:点击Back键或Home键退出,此时应用的进程依然在后台存活),这时会在已有的进程中启动该应用,即热启动;特点: 冷启动:由于冷启动需要系统重新创建一个新的进程...转载 2018-07-25 20:49:48 · 1931 阅读 · 0 评论 -
Button点击事件几种写法
Button点击事件:大概可以分为以下几种:匿名内部类定义内部类,实现OnClickListener接口定义的构造方法用Activity实现OnClickListener接口指定Button的onClick的属性 首先我们简单地定义一个带Button的xml布局文件 activity_main.xml:<Button android:id="@+id/bt1" ...转载 2018-07-14 16:50:46 · 3098 阅读 · 0 评论 -
打包aar 时 如何不混淆某个类及里边的某个方法呢
package com.demo.download下有个 DownloadManager 类public static DownloadManager getInstance() 方法public void startDownload(Url url, String path, Callback);假设就以上两个方法是对外公开的,这两个方法名及类名我不想混淆,其他的方法名称及变量名称想都混淆了...原创 2018-06-06 20:52:12 · 3699 阅读 · 0 评论 -
Android Studio 里面的引用第三方库总结
Android Studio引用第三方库很方便,只需要一句代码就可以搞定,几种引用第三方库的方式,总结一下:方式:1:它就会自动把这个包下载下来,并且引用它。节省git空间,而且修改版本也很方便。compile 'com.android.support:support-v4:23.3.0'方式2:引用libs下所有jar包compile fileTree(dir: 'libs', include:...转载 2018-05-30 10:35:08 · 1958 阅读 · 0 评论 -
Execution failed for task ':app:compileDebugNdk'.异常的处理
引用的一些ndk资源没有被配置或者说一些安全隐患什么的。需要怎么解决?就在gradle里面配置就行了。在app/build.gradle中的android里面加上sourceSets.main { jni.srcDirs = []}在项目下的gradle.properties加上这一句就可以了“android.useDeprecatedNdk=true”...原创 2018-05-24 19:10:42 · 2745 阅读 · 0 评论 -
Android读取本地或网络图片并转换为Bitmap
在做android项目时,我们经常需要从本地或者网络读取图片,并转换为Bitmap图片,以便使用,下面是读取本地图片并转换的方法:Java代码?1234567891011121314151617181920212223242526272829303132333435/** * 得到本地或者网络上的bitmap url - 网络或者本地图片的绝对路径,比如: * * A.网络路径: ur...转载 2018-05-29 10:37:07 · 8970 阅读 · 2 评论 -
Android中RelativeLayout各个属性 android:layout_alignParentLeft=”true”
android:layout_above="@id/xxx" --将控件置于给定ID控件之上android:layout_below="@id/xxx" --将控件置于给定ID控件之下android:layout_toLeftOf="@id/xxx" --将控件的右边缘和给定ID控件的左边缘对齐android:layout_toRightOf="@id/xxx" --将控件的左边缘和给定I...原创 2018-05-29 10:08:36 · 5300 阅读 · 0 评论 -
通过getIntent()获得的Intent
通过getIntent()获得的Intent用于开启Activity(Activity开启本身)时,观察发现Activity不会走onDestroy()方法.那么以下两种获得Intent的方法在开启Activity时,有什么本质区别吗?Intent intent1 = getIntent(); //此方法在MainActivity中调用Intent intent2 = new Intent(Mai...转载 2018-05-24 11:14:04 · 27604 阅读 · 1 评论 -
Application和四大组件启动时的方法顺序和相关注意事项
背景在做一个项目时,我们想在应用最早启动时,先做一些判断,然后根据判断的结果再决定要不要对其他应用提供服务。对其他应用提供服务指的是,我们的应用中有 ContentProvider,第三方应用通过 call 方法调用到我们提供的 ContentProvider,ContentProvider 执行逻辑后并给调用的返回结果。当第三方应用调用我们的应用时,我们的应用存在启动和未启动的两种情况。刚...转载 2018-05-28 20:50:47 · 677 阅读 · 0 评论 -
解决SurfaceView调用setZOrderOnTop(true)遮挡其他控件的问题
SurfaceView遮挡其他控件的项目背景:最近在做播放器项目,由于底层实现是用Surface和OpenGL切换渲染,所以在布局里面同时使用了GLSurfaceView和SurfaceView,同时播放控制按钮是自定义的,也没有使用Android自己提供的MediaCtroller控件。在这种背景下,问题出现了,如果有相关开发基础的同学应该知道,当SurfaceView和GLSurfaceVie...转载 2018-06-04 17:44:50 · 2436 阅读 · 0 评论 -
用Gradle命令查看项目中库的依赖关系
在Terminal中,可以通过 gradle 的命令查看项目中所使用库的版本,并且可以更加直观看到库之间的依赖关系。同时它们可以帮助您跟踪并解决与库版本冲突有关的任何问题。Building Android appsdependencies指令:$ ./gradlew :app:dependencies –configuration compile说明: 在Window系统下,无需使用./开头,直接...转载 2018-05-28 14:15:41 · 3994 阅读 · 0 评论 -
Android应用使用Multidex突破64K方法数限制
前几天,开发中遇到一个问题,Log信息如下:E/AndroidRuntime(10943): FATAL EXCEPTION: mainE/AndroidRuntime(10943): Process: com.freeme.gallery, PID: 10943E/AndroidRuntime(10943): java.lang.NoClassDefFoundError: com.freem...转载 2018-05-22 17:43:15 · 165 阅读 · 0 评论 -
Android代码规范----按钮单击事件的四种写法
【前言】按钮少的时候用第三种的匿名内部类会比较快,比如写demo测试的时候或者登陆界面之类。按钮多的时候一般选择第四种写法。 一、第一种写法:在XML文件中声明onClick属性(很少用)在XML文件中显式指定控件的onClick属性,点击按钮时会利用反射的方式调用对应Activity中的onClick()方法。(1)xml文件代码如下: 1 <LinearLayout xmlns:andr...转载 2018-05-25 18:08:58 · 212 阅读 · 0 评论