android框架

Android方向知识体系

匿名 (未验证) 提交于 2019-12-02 23:43:01
Android 基础:UI适配,界面布局,组件,四大组件使用及生命周期,intent,fragment,sqlite【第一行代码,郭霖博客】 IPC机制:binder,bundle,广播,共享内存,sharedprefer,contentprovider,socket【Android开发艺术探索】 线程机制:asynctask,intentservice,handlthread,线程池,各种锁,同步集合类concurrenthashmap、queue等,cas 消息机制:handler,message,messagequeue,looper,handler一般写法导致的内存泄漏 事件传递机制:动画,自定义动画,listview与recyclerview,tab与page 启动流程:开机,启动activity,启动APP【Android系统源码情景分析,老罗博客】 Android源码:Android框架,framework层(SM,WM、ams,pms,,,), 开源框架:eventbus,Rxandroid,OKHTTP,retrofit, 图片缓存:bitmap,缓存算法 内存泄漏:良好的编程习惯,几大容易导致的典型,规范,内存分析工具 优化:APP启动,listview,界面布局,高效算法,编程规范,阿里Android规范 虚拟机:JVM与dart,内存模型,类加载,安全机制

Android 响应式编程框架 - RxJava2(二)RxJava2+Retrofit 2获取网络数据

匿名 (未验证) 提交于 2019-12-02 21:53:52
本文主要让大家知道RxJava2+Retrofit 2获取网络数据简单方法,如果有不了解RxJava和Retrofit请先去学习了在来阅读。 // RxJava2.0 implementation 'io.reactivex.rxjava2:rxjava:2.0.1' implementation 'io.reactivex.rxjava2:rxandroid:2.0.1' // Retrofit implementation 'com.squareup.retrofit2:retrofit:2.3.0' implementation 'com.google.code.gson:gson:2.2.4' implementation 'com.squareup.retrofit2:converter-gson:2.3.0' // retrofit+gson implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0' // Rxjava与Retrofit结合使用必须添加这个依赖 compile 'com.github.bumptech.glide:glide:4.6.1' annotationProcessor 'com.github.bumptech.glide:compiler:4.6.1' //banner

Android开发之InstanceState详解

[亡魂溺海] 提交于 2019-12-02 19:35:40
本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState和onRestoreInstanceState。 关于这两个方法,一些朋友可能在Android开发很少用到,但在有时候掌握其用法会帮我们起到比较好的效果。 1. 基本作用简介: Activity的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它们不同于 onCreate()、onPause()等生命周期方法,它们并不一定会被触发。当应用遇到意外情况(如:内存不足、用户直接按Home键)由系统销毁一个Activity时,onSaveInstanceState() 会被调用。但是当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就不会被调用。因为在这种情况下,用户的行为决定了不需要保存Activity的状态。通常onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。 在activity被杀掉之前调用保存每个实例的状态,以保证该状态可以在onCreate(Bundle)或者onRestoreInstanceState(Bundle)

【转载】Android 面试题(1)(转)

一笑奈何 提交于 2019-12-02 19:25:34
真他妈的全面呢。 1. 请描述下Activity的生命周期。2. 如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?3. 如何将一个Activity设置成窗口的样式。(Edited by Sodino)4. 如何退出Activity?如何安全退出已调用多个Activity的Application?5. 请介绍下Android中常用的五种布局。6. 请介绍下Android的数据存储方式。(Edited by Sodino)7. 请介绍下ContentProvider是如何实现数据共享的。(Edited by Sodino)8. 如何启用Service,如何停用Service。(Edited by Sodino)9. 注册广播有几种方式,这些方式有何优缺点?请谈谈Android引入广播机制的用意。10. 请解释下在单线程模型中Message、Handler、Message Queue、Looper之间的关系。11. AIDL的全称是什么?如何工作?能处理哪些类型的数据?12. 请解释下Android程序运行时权限与文件系统权限的区别。(Edited by Sodino)13. 系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请说明原由。14. 有一个一维整型数组int[]data保存的是一张宽为width,高为height的图片像素值信息

Android 之 JNI 开发 详解

自古美人都是妖i 提交于 2019-12-02 18:50:16
NDK项目源码地址 : -- 第一个JNI示例程序下载 : GitHub - https://github.com/han1202012/NDKHelloworld.git 一. JNI介绍 1. JNI引入 JNI概念 : Java本地接口, Java Native Interface , 它是一个 协议 , 该协议用来沟通Java代码和外部的本地C/C++代码, 通过该协议 Java代码可以调用外部的本地代码, 外部的C/C++ 代码可以调用Java代码; C和Java的侧重 : -- C语言 : C语言中最重要的是 函数 function; -- Java语言 : Java中最重要的是 JVM, class类, 以及class中的方法; C与Java如何交流 : -- JNI规范 : C语言与Java语言交流需要一个适配器, 中间件, 即 JNI, JNI提供了一种规范; -- C语言中调用Java方法 : 可以让我们在C代码中找到Java代码class中的方法, 并且调用该方法; -- Java语言中调用C语言方法 : 同时也可以在Java代码中, 将一个C语言的方法映射到Java的某个方法上; -- JNI桥梁作用 : JNI提供了一个桥梁, 打通了C语言和Java语言之间的障碍; 2. Android中的应用程序框架 正常情况下的Android框架 : 最 顶层 是

Android 4.4 Bluetooth学习之一

限于喜欢 提交于 2019-12-02 18:01:40
一、写在前面的话 近来由于项目需求需要搞蓝牙这一块,之前在上家公司带LC(本地连接)组时也做过一点蓝牙,在Android系统中也解过一些bug,但是不够系统,现在正好比较系统的学习蓝牙。 二、蓝牙的协议框架 A2dp Handset opp Hid Health Pan Map Dun... | | |... CORE Stack Specification | Host Controller Interface | chip 三、Android 4.4(Kitkat)上蓝牙的启动流程 1.服务启动 系统启动时在SystemServer中注册蓝牙服务管理BluetoothManagerService服务: if (SystemProperties.get("ro.kernel.qemu").equals("1")) { Slog.i(TAG, "No Bluetooh Service (emulator)"); } else if (factoryTest == SystemServer.FACTORY_TEST_LOW_LEVEL) { Slog.i(TAG, "No Bluetooth Service (factory test)"); } else if (!context.getPackageManager().hasSystemFeature

Android视频播放和横竖屏切换

百般思念 提交于 2019-12-02 14:46:45
最近做了一个项目,里面用到了视频播放这一块,当时想考虑Vitamio,demo也做了出来,但是后来发现它是商业收费的,并且收费相当可观,所以只能放弃了。然后找到了ijkPlayer,功能也很强大,最终选择了 Wei_Leng 基于ijkPlayer开发的superPlayer,在这里也要感谢一下这位无私的博主,贴下他的链接 superPlayer 但是因为我的布局稍微有点复杂,在切换横屏的时候,并不能完美实现,后来又参考了一位博主的文章,这里也贴一下: 视频播放横竖屏切换 好了,废话不多说了,先上效果图吧,包括手势操作: 下面写下我的集合过程: 1、去GitHub上搜索 superPlayer ,下载下来其源码,解压后的文件目录为: 这里我们用到的是ijkplayerlibrary文件夹和superplayerlibrary文件夹,不难想出superplayerlibrary是通过依赖ijkplayerlibrary而开发出的一个自定义播放器框架; 2、将上述两个文件夹作为moudle导入我们需要使用播放器的工程project中,并在gradle中添加依赖: compile project ( ':superplayerlibrary' ) 3、下面就是我们自己在我们的项目中引用自定义的播放器框架了: 在xml文件中: <? xml version= "1.0" encoding=

使用IJKPlayer播放视频实现了一些播放视频的基本操作

て烟熏妆下的殇ゞ 提交于 2019-12-02 14:44:23
使用IJKPlayer播放视频实现了一些播放视频的基本操作 Iijkplayer目前是很流行的音视频框架,集成我这里就不多说了,网上很多,大概就是编译ijkplayer的源码得到里边的so文件,添加到自己项目的libs文件夹中,gradlle依赖下资源。我这里是在IjkVideoView基础上开发的, 自己实现了播放、暂停、旋转全屏播放、音量和亮度调节、进度条、拖动进度条播放功能 ,可以满足普通的播放视频的需求; Demo下载 友情提示我播放的是本地视频需要自己在sd卡目录下放一个视频文件,6.0以上是需要动态申请读写sd卡权限的,我代码里边没有加入,我在手机设置里自己手动开启的。 看下动态效果图: 先看下布局layout,IjkVideoView的高度必须要是>0否则不会创建view就不会创建MediaPalyer对象了。我建议不居中的IjkVideoView高度和宽度填充处理,之后IjkVideoView再根据视频的宽高按比例设置达到自适应的效果。如果想在video上实现滑动控制音量和亮度,我建议再加一层布局就可以自定义它实现手势滑动功能; <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android

Android 音视频深入 十九 使用ijkplayer做个视频播放器(更新:增加了小框,2018-3-12)

喜欢而已 提交于 2019-12-02 14:43:56
项目地址 https://github.com/979451341/Myijkplayer 前段时候我觉得FFmpeg做个视频播放器好难,虽然播放上没问题,但暂停还有通过拖动进度条来设置播放进度,这些都即便做得到,可以那个延缓。。。。。 现在学习一下目前移动端最知名的视频播放器的框架ijkplayer,这个框架他是基于FFmpeg、SDL、还有安卓原生API MediaCodec之类的。他是没有播放界面的,这个需要我们去做,所以这个里我就做个基于ijkplayer的视频播放器,随便浅显的说一下ijkplayer的源码,关于ijkplayer的源码以后会专门出一篇博客说一下。 1.首先了解一下ijkplayer咋用 我这里引入ijkplayer是通过添加依赖 implementation 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8' implementation 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8' implementation 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.8' implementation 'tv.danmaku.ijk.media:ijkplayer-arm64:0.8.8' implementation 'tv.danmaku

SwipeRefreshLayout和RecyclerView实现下拉刷新和加载更多(当总数据不够一页,也进行了处理)

ε祈祈猫儿з 提交于 2019-12-02 13:57:59
前言:利用SwipeRefreshLayout和RecyclerView来实现下拉刷新和加载更多,有很多的例子,但普遍都存在一个问题,当总的数据不够一屏时,FooterView也显示了,如果直接隐藏FooterView,加载更多时FooterView又不显示了,捣鼓了一阵子后,总算完美的解决了,所以记录一下,同时为了方便使用,进行了一些简单的封装。 直接进入主题,关于SwipeRefreshLayout和RecyclerView的一些基本介绍,就不在这里累述,不了解的童鞋,上网查一下吧! 一、封装自己的RefreshLayout控件 为什么要封装?为了使用方便;更为了Activity简单(MVP模式);因为Adapter的数据源类型不确定,所以采用泛型来实现。 java类和xml布局如下图 仔细的童鞋,已经发现了java类继承的是LinearLayout(xml根节点),为什么不用直接继承SwipeRefreshLayout(xml根节点)呢?其实一开始也是直接已SwipeRefreshLayout为根节点的,直接以SwipeRefreshLayout为根节点,运行后发现下拉刷新的颜色无法修改(swipeRefreshLayout.setColorSchemeColors(int color)无效),而且SwipeRefreshLayout.setRefreshing(false