android框架

十分钟理解Gradle

爱⌒轻易说出口 提交于 2019-12-03 04:37:21
一、什么是Gradle 简单的说,Gradle是一个构建工具,它是用来帮助我们构建app的,构建包括编译、打包等过程。我们可以为Gradle指定构建规则,然后它就会根据我们的“命令”自动为我们构建app。 Android Studio中默认就使用Gradle来完成应用的构建。有些同学可能会有疑问:”我用AS不记得给Gradle指定过什么构建规则呀,最后不还是能搞出来个apk。“ 实际上,app的构建过程是大同小异的,有一些过程是”通用“的,也就是每个app的构建都要经历一些公共步骤。因此,在我们在创建工程时,Android Studio自动帮我们生成了一些通用构建规则,很多时候我们甚至完全不用修改这些规则就能完成我们app的构建。 有些时候,我们会有一些个性化的构建需求,比如我们引入了第三方库,或者我们想要在通用构建过程中做一些其他的事情,这时我们就要自己在系统默认构建规则上做一些修改。这时候我们就要自己向Gradle”下命令“了,这时候我们就需要用Gradle能听懂的话了,也就是Groovy。Groovy是一种基于JVM的动态语言,关于它的具体介绍,感兴趣的同学可以文末参考”延伸阅读“部分给出的链接。 我们在开头处提到“Gradle是一种构建工具”。实际上,当我们想要更灵活的构建过程时,Gradle就成为了一个编程框架——我们可以通过编程让构建过程按我们的意愿进行。也就是说

Android开发高手课NOTE

半腔热情 提交于 2019-12-03 04:28:02
最近学习了极客时间的《Android开发高手课》很有收获,记录总结一下。 欢迎学习老师的专栏: Android开发高手课 内存优化 卡顿的原因 频繁 GC 造成卡顿、物理内存不足时系统会触发 low memory killer 机制,系统负载过高是造成卡顿的俩个原因。 除了频繁 GC 造成卡顿之外,物理内存不足时系统会触发 low memory killer 机制,系统负载过高是造成卡顿的另外一个原因。“用时分配,及时释放” Android 3.0~Android 7.0 将 Bitmap 对象和像素数据统一放到 Java 堆中,这样就算我们不调用 recycle,Bitmap 内存也会随着对象一起被回收。不过 Bitmap 是内存消耗的大户,把它的内存放到 Java 堆中似乎不是那么美妙。即使是最新的华为 Mate 20,最大的 Java 堆限制也才到 512MB,可能我的物理内存还有 5GB,但是应用还是会因为 Java 堆内存不足导致 OOM。Bitmap 放到 Java 堆的另外一个问题会引起大量的 GC,对系统内存也没有完全利用起来。 将 Bitmap 内存放到 Native 中,也可以做到和对象一起快速释放,同时 GC 的时候也能考虑这些内存防止被滥用。NativeAllocationRegistry 可以一次满足你这三个要求,Android 8.0

Android的快速开发框架,Afinal 0.2.1 发布

孤街浪徒 提交于 2019-12-03 04:10:01
Afinal 是一个android的 orm 和 ioc 框架。而且封装了android中的httpClient,使其更加简单易用。使用finalBitmap,无需考虑bitmap在android中加载的时候oom的问题和快速滑动的时候图片加载位置错位等问题。 Afinal的宗旨是简洁,快速。约定大于配置的方式。尽量一行代码完成所有事情。 目前Afinal主要有四大模块: 1、FinalDB模块:android中的orm框架,一行代码就可以进行增删改查。支持一对多,多对一等查询。 2、FinalActivity模块:android中的ioc框架,完全注解方式就可以进行UI绑定和事件绑定。无需findViewById和setClickListener等。 3、FinalHttp模块:通过httpclient进行封装http数据请求,支持ajax方式加载。 4、FinalBitmap模块:通过FinalBitmap,imageview加载bitmap的时候无需考虑bitmap加载过程中出现的oom和 android容器快速滑动时候出现的图片错位等现象。FinalBitmap可以配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等。 FinalBitmap的内存管理使用lru算法,没有使用弱引用(android2.3以后google已经不建议使用弱引用,android2

Material Design实现的美观的登录界面

冷暖自知 提交于 2019-12-03 04:08:38
官方介绍学习: https://material.google.com/ 英文版基于Material Design的登录界面: http://sourcey.com/beautiful-android-login-and-signup-screens-with-material-design/ 翻译版基于Material Design的登录界面: https://gold.xitu.io/entry/573bb4b6df0eea005e758f0b Material Design Library 例子中采用了Material Design的库的控件,但是具体使用细节没有写出来,容易遇到很多问题。 Bug: Error inflating class android.support.design.widget.TextInputLayout :添加完xml后,运行时报错。 解决方法: 1.在module的gradle中添加依赖 compile 'com.android.support:appcompat-v7:24.0.0' compile 'com.android.support:design:24.0.0' 并且:修改manifest文件中Application标签下的theme: android:theme="@style/Theme.AppCompat"> 知识梳理:

Android开发指南-窗口小部件(App Widgets)

拜拜、爱过 提交于 2019-12-03 01:25:31
http://blog.csdn.net/iefreer/article/details/4626274# 应用程序窗口小部件 App Widgets 应用程序窗口小部件( Widget )是微小的应用程序视图,可以被嵌入到其它应用程序中(比如桌面)并接收周期性的更新。你可以通过一个 App Widget provider 来发布一个 Widget 。可以容纳其它 App Widget 的应用程序组件被称为 App Widget 宿主。下面的截屏显示了一个音乐 App Widget 。 这篇文章描述了如何使用 App Widget Provider 发布一个 App Widget 。 基础知识 The Basics 为了创建一个 App Widget ,你需要下面这些: AppWidgetProviderInfo 对象 描述一个 App Widget 元数据,比如 App Widget 的布局,更新频率,以及 AppWidgetProvider 类。这应该在 XML 里定义。 AppWidgetProvider 类的实现 定义基本方法以允许你编程来和 App Widget 连接,这基于广播事件。通过它,当这个 App Widget 被更新,启用,禁用和删除的时候,你都将接收到广播通知。 视图布局 为这个 App Widget 定义初始布局,在 XML 中。 另外,你可以实现一个

HTML5、WebKit与移动应用开发

一笑奈何 提交于 2019-12-03 01:24:57
一、 前言 微软之所以能够在过去几十年间称霸 IT 业,主要是凭借一项无法超越的优势: Windows 操作系统,目前快速发展的移动设备成为 IT 业关注的重点,有可能移动互联网应用将会是 IT 业下一个高速增长点(也可能是泡沫),犹如 2001 年的互联网一般。而在移动操作系统上,现在看来微软的 Windows Mobile 操作系统完全不值一提,就算是其最新的 WP7 也不再受人关注,现在大家的目光都集中在两家重量级公司 Google 和 Apple 出品的 Android 和 iOS 移动操作系统上,其他的什么 MeeGo 、 RIM 、 Symbian 统统都只能让路,网上充斥的都是一些“我该买 Iphone4 还是 HTC?” 、“我该学 Android 开发还是 iOS 开发呢?”这些类二选一问题,可见 Android 和 iOS 的风靡程度。 移动操作系统的风靡得益于这几年来移动互联网设备的迅猛发展,从智能手机到平板电脑, CPU 从单核到双核以致于四核,目前移动互联网设备的特点,主要有以下特点 1 、屏幕大,几乎就是整个机身 2 、支持手指触摸以及多点触摸 3 、没有输入键盘,取而代之的是屏幕虚拟键盘 4 、支持高速无线连接 (Wifi 54Mbit/s) 5 、支持 EDGE 网络低速( 220kbit/s )连接 6 、支持“永远在线”的 3G 网络连接(

Vue框架下 JS与native的交互(iOS&Android)

匿名 (未验证) 提交于 2019-12-03 00:41:02
需求: 在原生App里打开webview, 嵌入H5. 在H5中点击某个元素, 触发与native app交互, 又跳回到app中. 同理, 在app中完成某项操作后, 获得某个参数, 根据这个状态刷新页面. 框架: Vue. JavaScript原生的写法已经调通了, 并且与native端的已经联调通过. 所以这里是把它们迁移到Vue框架的写法. 这里要区分iOS系统和Android系统. iOSϵͳ 在这里与iOS开发的同事协商后, 决定使用 WebViewJavascriptBridge 来开发. 前端不需要放入任何js插件. 只需要准备一下这段内容. bridge.js function setupWebViewJavascriptBridge(callback) { if (window.WebViewJavascriptBridge) { return callback(window.WebViewJavascriptBridge) } if (window.WVJBCallbacks) { returnwindow.WVJBCallbacks.push(callback) } window.WVJBCallbacks = [callback] let WVJBIframe = document.createElement(‘iframe‘) WVJBIframe

Android MVVM框架的认识和使用

匿名 (未验证) 提交于 2019-12-03 00:39:02
关于这个MVVM,现在公司的框架就是MVVM,刚开始感觉MVVM真的麻烦,真的不爽,但是真正用起来的时候,感觉比MVP好用多了,好用的不是点半点。= - =。嗯,喜新厌旧~。 关于MVVM的理解如下: Model :负责数据实现和逻辑处理,类似MVP。 View : 对应于Activity和 XML ,负责View的绘制以及与用户交互,类似MVP。 ViewModel : 创建关联,将model和view绑定起来,如此之后,我们model的更改,通过viewmodel反馈给view,从而自动刷新界面。 项目中使用的MVVM框架Github地址: https://github.com/googlesamples/android-architecture/tree/todo-mvvm-databinding 开发者下载该项目,然后需要复制几个工具类到自己的项目中: ActivityUtils.java ViewModelHolder.java 然后我们开启android自带的DataBinding开关,再app下的build.gradle中android节点下添加如下代码: dataBinding { enabled = true } 这样MVVM的环境就算配置好了,接下来就是愉快的玩耍了~ 首先还是老样子,UI显示: hello world

android 视频直播

匿名 (未验证) 提交于 2019-12-03 00:39:02
一、直播原理 直播本质是实时推送/拉取过来音视频数据 二、相关协议 直播协议主要分为三种:RTMP协议、FLV、HLS。(视频直播源有效性测试工具:VLC,这是一个开源的跨平台多媒体直播器) (1)RTMP 一个互联网TCP/IP五层体系结构中应用层协议,可以用来推送又可以直播,基本单元称为消息,可以查分为更小的单元:消息块。 (2)FLV FLV协议是在大块的视频和音频头部加入一些标志性信息,在延迟表现和大规模并发方面很成熟,适合手机端APP直播。 (3)HLS 苹果推出的解决方案,将视频分为5-10秒的视频小分片,然后用m3u8索引表进行管理;HLS在IPHONE和大部分Android手机浏览器的支持非常给力,常用于QQ和朋友圈的URL分享。 三、M3U8 m3u8文件是一个索引文件,打开它时,根据里面的索引找到对应的音视频网络地址进行播放。 优点:主要是可以做多码率的适配,根据网络带宽,客户端会选择一个适合自己码率的文件进行播放。 四、播放框架 Vitamio视频播放框架,支持播放主流格式的音视频、网络视频流(http/rtsp/mms); 使用流程:下载SDK→拷贝so文件到案例工程jniLibs→加入权限→编译→引用VideoView→初始化Vitamio; 五、示例 下载依赖,下载地址:https://download.csdn.net/download

Android5.0 CheckBox颜色修改

匿名 (未验证) 提交于 2019-12-03 00:38:01
Android5.0开始,CheckBox带有material design动画效果,其默认的样式如下图所示: 可以看到,在上图中,CheckBox的边框为灰色,当被选中后,填充色为绿色。 那么如果我们想要改变边框和填充色,同时也保存material design动画效果,应该怎么做呢。 在style.xml文件中新增一条: <style name= "My_CheckBox" parent= "@android:style/Widget.Material.CompoundButton.CheckBox"> < item name= "android:colorControlActivated">@color/colorAccent</ item> < item name= "android:colorControlNormal">@color/colorPrimary</ item> </style> 然后,设置CheckBox: < CheckBox android:id= "@+id/save_pass" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:theme= "@style/My_CheckBox"/> 需要注意的是: