针对初手,大神请略过第一部分:将本地项目上传到gitLab1.打开进入gitLab主页面1.点击+newproject如上图:给项目起个名字,名字前的选项是项目名的路径。之后点击右下角的Createproject2.Gitglobalsetup此时可以做一些全局的设置,也可以略过gitconfig--global[user.name](user.name)"yourname"gitconfig--
一、概述在学习完Lifecycle之后,我们如何通过Lifecycle让除了Activity/Fragment之外的其它对象都可以很方便地收到当前页面生命周期的回调。今天我们来学习ViewModel+LiveData,它们共同的特点就是绑定到了UI组件(Activity/Fragment)上,可以收到生命周期的回调,简单地来说,这两个组件的作用分别为:LiveData:在Lifecycle范围内监
1.前言关于Handler消息机制的博客实际上是非常多的了。之前也是看别人的博客过来的,但是过了一段时间之后,一些细节也就忘了。所以,就自己撸一篇,权当笔记,方便以后翻阅。这篇文章主要是分析Handler消息机制原理以及收集一些面试题来讲解,熟悉的话可以不用看了。本文源码基于android27。2.Android消息机制概述2.1本质Android的消息机制本质就是一套消息发送,传递及处理的机制。
看了网上的一些handler原理分析,是从源码级别直接看的。但是总觉得没有从实战上分析吗,感觉有点蹩脚。这篇文章算是自己分析的,也参考了《android开发艺术探索》,还有网上的一些其他资料,如有侵权请私信先来举个栗子吧一般在使用handler的时候,用其来更新UI,也就是说在主线程进行更新界面操作,当时子线程请求网络数据,如此handler刚好派上用场。先看实例吧publicclassMainA
发现问题前几天把手机系统升级到基于Android7.0,后来在升级调试一个应用时抛出如下异常信息:android.os.FileUriExposedException:file:///storage/emulated/0/Android/data/com.skyrin.bingo/cache/app/app.apkexposedbeyondappthroughIntent.getData()ata
呐呐呐....亲爱的各位小伙伴们,今天我又要来出洋相了,本渣渣媛通过自己血与泪的教训,希望帮助跟我一样的渣友少走弯路。由于最近项目组走了一个牛掰的小哥哥,所以虽然项目任务重大,只能我一个人扛着。事情是这样的,对接后台时后端小哥哥说用post,我就简单把请求方法改成post,然后代码采用参数拼接在url后的形式,并没有注意其他的东西,而且请求接口时候,也完全没得啥子问题,问题就出现在我做上传身份证图
SparseArraysparse稀疏介绍SparseArray用来实现int类型与Object类型的映射,跟普通的Map不同,普通Map中有更多的空索引,对比HashMap来说,稀疏数组实现了更高效的内存使用,因为稀疏数组避免了int类型key的自动装箱,且稀疏数组每个value都不需要使用Entry对象来包装。所以在Android开发中,我们可以使用SparseArray来实现更高效的实现Ma
引用xml资源当需要从xml中引用资源对象时,必须使用@紧随其后的是资源类型然后是资源民称 @资源类型/资源名称+的作用 xml设置android:id +只有在第一次定义ID资源时需要 它告诉sdk资源需要创建id当编译后将会为该资源创建idSDK即可直接使用该id所以在其他xml中使用该id就可以不加+关于资源的管理 res资源管理raw/&n
ActionBar 提供了多种UI 主要包括:1.一个提供icon显示的区域与当前所处位置的说明2.以可预测的方法访问搜索等重要操作3.支持导航和视图切换(通过标签页或者下拉列表)要求:app必须使用actionbar可用的主题注意:android2.1以下版本没有actionBar 需要依赖supportv7appcompat包在3.0以上版本直接选择Theme.H
这一节我们来讲解启动界面,效果如下:首次创建一个SplashActivity用来做启动界面,因为创建完项目默认是MainActivity做主界面,所以需要去掉,将启动配置到同时去掉SplashActivity,并且去掉SplashActivity的标题栏,同时还要设置为全屏。Activity启动配置在清单文件将启动配置剪贴到SplashActivity:<activityandroid:na
一:线程相关概念聊多线程之前,我们先说一说线程,说线程之前,我们了解一下进程。1.什么是进程?    通俗的说:我们平日里打开的QQ,微信,JEESNS,都是一个进程。进程是程序的一次动态执行过程,它需要经历从代码加载,代码执行到执行完毕的一个完整的过程,这个过程也是进程本身从产生,发展到最终消亡的过程。任务管理器就是管理和结束进程的,上图:任务管理器管理的
SimpleArrayMapSimpleArrayMap是AndoridV4包提供的一种用来代替HashMap的数据结构,由于HashMap在数据容量过大时时间复杂度会越来与趋近于O(N),故而效率不高。SimpleArrayMap的实现方式和工作过程使其内存占用更小,在数据量不大时效率更高,所以在Android开发中我们可以择机选择适合的方式来实现Map下面我们就来一步步分析,为什么Simple
Android多进程系列Android多进程通信之几个基本问题Android多进程之Binder的使用Android多进程之手动编写Binder类Android多进程之Binder解绑监听的问题Android多进程之Binder的意外死亡及权限校验Messenger也可以作为Android多进程的一种通信方式,通过构建Message来在客户端和服务端之间传递数据简单使用Messenger客户端通过
Git简介什么是Git?Git是世界上最先进的分布式版本控制系统(大家都这么说,我也只能装作自己觉得他很牛逼了,但好像的确是有点牛逼)为什么要用Git?Git作为目前最流行的版本控制工具,学会使用Git这应该是程序员一项必不可少的技能。但即使作为非技术开发人员掌握使用Git后,相信可以大大提高自己的工作效率。在工作学习中肯定会遇到过这种情况,比如你在写一篇文章或者一份报告论文,想要删除其中的某一部
此类库只实现了View的注解模块,实现布局加载注入,view注入,view监听事件注入;通过此类库可以学习下反射的基本用法以及XUtils注解模块的实现;一、实现功能1.布局注入2.View注入3.View监听事件注入二、实现思路这三种实现的原理都是通过IOC思想来实现;功能1和2通过反射获取到自定义的注解,解析注解,通过反射调用设置布局的setContentView和findViewById方法
引言当面试官说请你介绍一下activity启动模式,大多数人都能整两句,什么栈顶复用啊栈内复用啊,不过,你确定你真的懂启动模式吗?如果你能回答出下面的问题,那么你可以直接退出当前界面。假设有如下四个activity:A(standard)B(singleTop)C(singleTask)D(singleInstance)它们的启动顺序依次是ABCDABCD,请描述activity栈内变化。基于交互
如何使用*******//在开发阶段,会需要一个enable开关,可以关闭mock数据@MOCK(value="",enable=false)@GET("http://**mock2")Observable<String>mock1();//直接使用文件名,会从assets文件夹中读取文件,直接mock数据返回@MOCK("mockdata.json")@GET("http://**m
时间悬浮带时间戳的列表,要求时间悬浮顶部,动态替换顶部时间如下图,如下图,布局实现多布局实现,时间悬浮为一个布局,数据相关内容为一个布局,这里推荐一个Adapter依赖库BRVAHpublicInformationAdapter(@NullableList<Information>data){super(data);addItemType(ITEM_STICK,R.layout.ite
0.天空盒这个效果最早是在腾讯的实景地图里看到的,当时觉得很牛逼,但是没有想过自己去实现以下。最近这段时间对opengl很有兴趣,顺便就搞了这个天空盒,话不多说,先上效果。天空盒的原理就是在三维空间中放置一个正方体,然后将我们的相机放置在正方体内,当我们的视点转动,相机跟着转动。我们就可以看到相应的景色的变换了,天空盒本质上是一个立方体。1.关于什么是OpenGL,什么是OpenGLES就不细说了
前提条件进行微信webview相关测试,需要准备:1.一台科学上网的电脑2.装了微信的安卓机(或模拟器)python/appium环境安装配置好打开微信调试功能申明:这个操作主要参考文章,写的不详细的地方,可以参考原文章打开微信,任意对话框输入:debugx5.qq.com点击网址--勾选【打开TBS内核Inspector调试功能】chromeinspect打开一个微信公众号,以中国电信为例(这边