android框架

初冬太冷?圣诞无处可去?那跟我一起来学Android吧

*爱你&永不变心* 提交于 2019-12-30 23:55:28
又到年底了,每到这个时候,我们都会慢慢反思,这一年都做了什么?有什么进步?年初的计划都实现了吗?明年年初有跳槽的底气了吗?况且今年的互联网环境太差,需要自己有足够的知识储备,才能够应对这凌冽的寒风。 本文主要是整理了中高级安卓需要会的(或者说面试被频繁问到的内容),主要作为参考大纲,之后会陆续更新每个详细部分,供大家参考,互相学习。 面试板块(PDF版如下): BAT面试合集(Binder,组件化插件化,热修复,AOP,QQ换肤,虚拟机,https,线程池原理,音视频原理) 算法合集(Hash,KMP 等) 中小厂面试合集(内存泄漏,Handler,View,MVC.MVP.MVVM,) 大厂相关更新技术(Glide,数据库,NDK) 面试小知识(java小知识) 设计模式(设计模式原则和分类) 数据结构(数据结构等等) 网络编程(三次握手和四次握手,Volley,OKHttps,Retrofit) 源码解析(属性动画实现原理等) 多线程解析(线程同步,进程线程) 性能优化(Webview,内存泄漏和内存溢出等) ( 顺手留下GitHub链接,需要获取相关面试或者面试宝典核心笔记PDF等内容的可以自己去找 ) https://github.com/xiangjiana/Android-MS 一丶设计模式与使用场景 (如)建造者模式: 将一个复杂对象的构建与它的表示分离

android之Service之Binder学习

情到浓时终转凉″ 提交于 2019-12-30 22:03:25
一、Binder框架 Binder用于完成进程间通信(IPC),比如普通应用程可以调用音乐服务,它工作在内核态,属于一个驱动,只是这个驱动要用的“硬件”是内存。 Binder架构由三个模块构成:服务端接口,Binder驱动,客户端接口。我们分开来看: 服务端 一个Binber服务端实际上是一个Binder类的对象,且一旦创建,内部就启动一个隐藏线程,用来接收Binder驱动发送的消息,收到消息后,会执行Binder对象中的onTransact()方法,并执照不同的参数执行不同的服务代码,所以实现一个Binder对象一定要重载onTransact()方法,onTransact()方法的参数来自于客户端调用transact()方法时的输入,两者的格式和顺序一定要一样。 Binder驱动 当服务端Binder对象创建时,同时会在Binder驱动中创建一个mRemote对象(这里不会再有新的线程),mRemote也是Binder类。当客户端访问远程服务时,是通过 mRemote对象 。 客户端 要访问服务端,先得到远程对象对应的mRemote对象,然后就可以调用其transact()方法,而在Binder驱动中,mRemote对象也重载了transact()方法,重载的内容重要是: 1.以线程间通信的模式,向服务端发送客户端传递过来的参数。 2.挂起当前线程(客户端线程)

android:layout_weight属性详解

五迷三道 提交于 2019-12-30 17:00:00
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>   在android开发中LinearLayout很常用,LinearLayout的内控件的android:layout_weight在某些场景显得非常重要,比如我们需要按比例显示。android并没用提供table这样的控件,虽然有TableLayout,但是它并非是我们想象中的像html里面的table那么好用,我们常用ListView实现table的效果,但是列对齐确比较麻烦,现在用 LinearLayout及属性android:layout_weight能很好地解决。下面我们共同体验下layout_weight这个属性。   一、LinearLayout内的控件的layout_width设置为"wrap_content",请看一下xml配置: <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" > <TextView android:layout_width="wrap_content" android:layout_height="fill_parent"

Android消息传递之EventBus

拥有回忆 提交于 2019-12-30 08:49:02
EventBus产生需求背景: 在做项目的时候往往需要应用程序内各组件间、组件与后台线程间的通信。比如耗时操作,等耗时操作完成后通过Handler或Broadcast将结果通知给UI,N个Activity之间需要通过Listener通信,其实这些都可以通过EventBus轻松实现,EventBus通过发布/订阅(publish/subscribe)方式来管理事件总。EventBus通过注解和反射机制 将订阅者连同订阅函数保存起来,然后在发送订阅的时候 遍历订阅函数数组进行调用,其实从这方面就可以EventBus执行效率多少会受到一点影响。 github地址:https://github.com/greenrobot/EventBus EventBus主要角色: Event 传递的事件对象 Subscriber 事件的订阅者 Publisher 事件的发布者 ThreadMode 定义函数在何种线程中执行 官网给出的各种角色的协作图 EventBus配置: EventBus框架也是采用建造者模式设计的,可以通过EventBusBuilder来设置一些配置信息,例如设置debug模式下要抛出异常 EventBus示例: 之前做图片类项 的时候,需要处理一个点赞数据的同步,比如在作品的详情页点赞 需要同时更新列表页该作品的点赞数量,这里还是以此为例。  1.)build

Android广告轮播图实现

谁说胖子不能爱 提交于 2019-12-30 04:41:35
先看效果 第一步,布局 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.xw.myviewpager.MainActivity"> <RelativeLayout android:layout_width="match_parent" android:layout_height="180dp"> <android.support.v4.view.ViewPager android:id="@+id/vp" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v4.view.ViewPager> <LinearLayout android:layout_width="match

Android 消息推送流程机制

最后都变了- 提交于 2019-12-30 04:29:40
   1.引言   所谓的消息推送就是从服务器端向移动终端发送连接,传输一定的信息。比如一些新闻客户端,每隔一段时间收到一条或者多条通知,这就是从服务器端传来的推送消息;还比如常用的一些IM软件如微信、GTalk等,都具有服务器推送功能。   推送方法如下:   1)通过SMS进行服务器端和客户端的交流通信。   在Android平台上,你可以通过拦截SMS消息并且解析消息内容来了解服务器的意图,可以实现完全的实时操作。但是问题是这个方案的成本相对比较高,且依赖于运营商。   2)循环主动定时获取   这种方法需要客户端来做一个定时或者周期性的访问服务器端接口,以获得最新的消息。轮询的频率太慢可能导致某些消息的延迟,太快则会大量消耗网络带宽和电池。   3)持久连接   这个方案可以解决由轮询带来的性能问题,但是还是会消耗手机的电池。我们需要开一个服务来保持和服务器端的持久连接(苹果就和谷歌的C2DM是这种机制)。但是对于Android系统,当系统可用资源较低,系统会强制关闭我们的服务或者是应用,这种情况下连接会强制中断。(Apple的推送服务之所以工作的很好,是因为每一台手机仅仅保持一个与服务器之间的连接,事实上C2DM也是这么工作的。即所有的推送服务都是经由一个代理服务器完成的,这种情况下只需要和一台服务器保持持久连接即可。C2DM= Cloud to Device

Android消息推送

删除回忆录丶 提交于 2019-12-30 04:25:52
1. 引言   所谓的消息推送就是从服务器端向移动终端发送连接,传输一定的信息。比如一些新闻客户端,每隔一段时间收到一条或者多条通知,这就是从服务器端传来的推送消息;还比如常用的一些IM软件如微信、GTalk等,都具有服务器推送功能。   推送方法如下:   1)通过SMS进行服务器端和客户端的交流通信。   在Android平台上,你可以通过拦截SMS消息并且解析消息内容来了解服务器的意图,可以实现完全的实时操作。但是问题是这个方案的成本相对比较高,且依赖于运营商。   2)循环主动定时获取   这种方法需要客户端来做一个定时或者周期性的访问服务器端接口,以获得最新的消息。轮询的频率太慢可能导致某些消息的延迟,太快则会大量消耗网络带宽和电池。   3)持久连接   这个方案可以解决由轮询带来的性能问题,但是还是会消耗手机的电池。我们需要开一个服务来保持和服务器端的持久连接(苹果就和谷歌的C2DM是这种机制)。但是对于Android系统,当系统可用资源较低,系统会强制关闭我们的服务或者是应用,这种情况下连接会强制中断。(Apple的推送服务之所以工作的很好,是因为每一台手机仅仅保持一个与服务器之间的连接,事实上C2DM也是这么工作的。即所有的推送服务都是经由一个代理服务器完成的,这种情况下只需要和一台服务器保持持久连接即可。C2DM= Cloud to Device

.9.png图片的生成和使用

别等时光非礼了梦想. 提交于 2019-12-29 18:04:28
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 开发应用程序的时候,如果一个应用的界面太丑,给用户的第一感觉就是这个产品很垃圾,即使功能很强悍。大公司的码农当然就不用担心了,因为有很多艺 术天赋的美工美眉来处理这个方面,但是如果是小公司的话,或者说你想自己开发应用的话,没有一个吸引人的界面是不会得到用户关注的。自己开发的应用如果看 着很喜爱,那当然再好不过了   废话有些多,了解.9.png图片已经一段时间了,索性将其记载下来,以防以后忘记。虽然网上有很多,但是很乱,看着心烦,而且不符合自己的需求,所以还是自己动手丰衣足食。   .9.png图片其实就是png格式图片,不过它比普通的png图片外围多了1px(像素)的边框,另外就是使用这种格式的图片可以实现背景自 适应大小且不失真的效果。比如某些控件横竖屏切换后控件的样子就变形了,或者某些图片作为控件背景也变形,这会让人很郁闷。幸好.9.png图片可以提供 这些需要的功能    使用步骤 1、 制作属于你自己的png图片,一定要是png图片。可以自己PS制作,也可以解压其他应用的apk文件,用里面的图片资源,Android系统也有图片资源可以使用() 2、 在D:\android\android-sdk-windows\tools目录下找到 draw9patch.bat 文件,然后将其打开

手机移动端WEB资源整合

我与影子孤独终老i 提交于 2019-12-29 01:27:55
meta基础知识 H5页面窗口自动调整到设备宽度,并禁止用户缩放页面 <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" /> 忽略将页面中的数字识别为电话号码 <meta name="format-detection" content="telephone=no" /> 忽略Android平台中对邮箱地址的识别 <meta name="format-detection" content="email=no" /> 当网站添加到主屏幕快速启动方式,可隐藏地址栏,仅针对ios的safari <meta name="apple-mobile-web-app-capable" content="yes" /> <!-- ios7.0版本以后,safari上已看不到效果 --> 将网站添加到主屏幕快速启动方式,仅针对ios的safari顶端状态条的样式 <meta name="apple-mobile-web-app-status-bar-style" content="black" /> <!-- 可选default、black、black-translucent --> viewport模板

手机移动端WEB资源整合

时光毁灭记忆、已成空白 提交于 2019-12-29 01:27:25
meta基础知识 H5页面窗口自动调整到设备宽度,并禁止用户缩放页面 <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" /> 忽略将页面中的数字识别为电话号码 <meta name="format-detection" content="telephone=no" /> 忽略Android平台中对邮箱地址的识别 <meta name="format-detection" content="email=no" /> 当网站添加到主屏幕快速启动方式,可隐藏地址栏,仅针对ios的safari <meta name="apple-mobile-web-app-capable" content="yes" /> <!-- ios7.0版本以后,safari上已看不到效果 --> 将网站添加到主屏幕快速启动方式,仅针对ios的safari顶端状态条的样式 <meta name="apple-mobile-web-app-status-bar-style" content="black" /> <!-- 可选default、black、black-translucent --> viewport模板