首页
学习
活动
专区
工具
TVP
发布

指尖下的Android

专栏成员
67
文章
249465
阅读量
13
订阅数
Linux中IO多路复用机制
之前的面试有问到主线程在 ActivityThread 里初始化 Looper 后调用了 Looper.loop() 这个死循环为什么不会阻塞主线程,当时回答因为在 Looper.loop() 方法里调用了 MessageQueue.next() 方法,这个 next() 中调用了nativePollOnce() ,这个本地方法最终实现是 android_os_MessageQueue_nativePollOnce ,因为这里的 IO 机制采用 epool ,当它没有消息时会调用 wait() 函数释放 CPU 进入休眠等待,当有消息来临会通过管道写入来通知唤醒。后面百度了一下 epool 函数,然后对比其他 IO 模型做一个笔记,首先说 IO 是什么, IO 就是 InputStream 和 OutputStream 的缩写,输入和输出的意思,传统的我们通过字节流或字符流来操作流,此时是同步阻塞 IO 模型,后面更新的Java NIO 是同步非阻塞 IO 模型
萬物並作吾以觀復
2019-08-05
1.2K0
Java中 private、protected、public 和 default 的区别
具有最大的访问权限,可以访问任何一个在classpath下的类、接口、异常等。它往往用于对外的情况,也就是对象或类对外的一种接口的形式。
萬物並作吾以觀復
2019-05-15
1K0
菜鸡的MVP架构漫谈
相信大家在网上看过关于MVP架构的博客数不胜数,至于MVP到底是什么,也不需要我再从百度百科复制一遍了,通俗的说MVP就是解决Model和View的耦合,没有使用架构的代码就是一个Activity里处理了UI逻辑、网络请求等等,有的时候一个Activity五六百行,我曾经看过同事的一个适配器上千行,因为业务逻辑过于复杂,说了这么多,MVP到底有什么作用呢?我们非用不可吗,MVP可以把"功能"抽离出来,因为一个项目中会出现很多页面的某个功能是相似的,这就代表我们不用架构的话,重复的代码会大量的出现在我们的项目中,这不符合单一原则,最后引用一下大佬的总结,“mvp最关键的点就是把Activity中的ui逻辑抽象成view接口,把业务逻辑抽象成presenter接口,model还是数据模型。架构是对客观不足的妥协,规范是对主观不足的妥协。”
萬物並作吾以觀復
2018-12-19
4720
Android 仿UC浏览器详情页评论弹框效果
额,突然发现UC被我卸载了,这个是QQ浏览器的效果,不过都一样,如果当前页面不是全屏的话,把根布局设为相对布局,然后设置评论布局为处于底部,这样在点击评论时弹开键盘会触发布局重绘,底部的评论也会处于软键盘的上方,键盘消息,布局下移,但是我们要说的是全屏的情况下我们如何处理。 首先要监听到软件盘弹起,然后再设置评论的popupWindow
萬物並作吾以觀復
2018-12-19
1.2K0
安卓7.0在线更新解析包时出现问题
关于7.0行为变更,FileProvider应用共享文件的问题可以看鸿洋大佬的这篇博客 https://blog.csdn.net/lmj623565791/article/details/72859156 但是我遇到的这个问题是明明有授权临时权限,FileProvider的XML也有写,但是在下载apk后解析安装包出错,后面回顾一圈代码发现,有问题。
萬物並作吾以觀復
2018-12-12
1.4K2
AndroidStudio AAPT2 error: check logs for details报错解决方案
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:mergeDebugResources'. 后
萬物並作吾以觀復
2018-12-12
1.7K0
Android WebView 踩坑之路
H5定位 // 定位(location) settings.setGeolocationEnabled(true); String dir = this.getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath(); //设置定位的数据库路径 settings.setGeolocationDatabasePath(dir); w
萬物並作吾以觀復
2018-10-10
1.1K0
Execution failed for task ':app:processDebugManifest'. at org.gradle.api.internal.tasks.executio...
新项目需要用到视频播放,果断在项目中依赖了饺子播放器,因为用的人还挺多的,Stargazers有7.7K了,然后开始了我的采坑之路,不是说这个框架很坑,而是AndroidStudio。
萬物並作吾以觀復
2018-10-10
3.7K0
Android Activity详解(一)
在此之前,我们新建一个项目,代码非常简单,两个活动之间相互跳转(本来想做GIF图的,不会~~~~(>_<)~~~~)
萬物並作吾以觀復
2018-09-13
9120
JNI之路径初探---5
qsort是一个C语言的排序函数,这不是我们讨论的重点, jint * (JNICALL *GetIntArrayElements) (JNIEnv *env, jintArray array, jboolean *isCopy); 这个函数的作用是得到一个jni数组元素的指针,jintarray里面的每一个元素都是jint类型,数组的特性就是第一个元素的地址就是它的指针,根据元素类型就可以往下得到所有元素,这个函数的第三元素是一个jboolean类型的指针,它的含义就是说如果我现在在C语言层处理这个数组,它要不要复制,不复制代表处理的是和JAVA同一个内存即数组,这里官方建议填NULL,那么数组排序后,操作的也是同一块内存为什么还要去同步一下呢?这里我打印了一下他们的地址,发现不同,由此可以得出NULL和JNI_TRUE都会复制内存,如果有兴趣的同学可以试一下JNI_FALUSE,这个参数同样还是复制了,而填入JNI_TURE后再同步内存会提示JVM运行时的异常,所以不管是哪一个参数其实都不是操作同一块内存,最后如果要在JAVA层去处理结果一定要同步一下内存。
萬物並作吾以觀復
2018-09-13
3300
Android Handler机制原理及源码解析
今天打算写一下Handler机制的原理及源码解析,Handler在我们的开发中用到的频率还是非常高的,同时这也是一个非常基础的知识点,但是即使是基础知识,有很多工作两三年的安卓开发依然是一知半解,搞不清楚原理,包括View、ViewGroup的事件分发及绘制流程。 在深入学习一下知识点之前,希望能够带着疑问去思考: 1.为什么在子线程实例化Handler会报错闪退,而主线程不会 2.为什么每个线程只能存在一个Looper和MessageQueue 3.多个Handler发送消息是怎么保证Looper轮询消息队列发送最新消息不错乱发给其他Handler的 4.子线程真的不能更新UI吗? 5.ThreadLocal的作用 ......
萬物並作吾以觀復
2018-09-13
8890
AndroidStudio无法输出日志的Bug
正常情况下我们在真机调试程序时,如图箭头所指的位置显示的应该是该应用的主包名,但是有的时候明明打开了开发者模式,但是却无法输出日志,该位置显示的也不是应用包名,显示的是 no debuggable applications ,这个时候我们就需要打开adb
萬物並作吾以觀復
2018-09-13
1.2K0
FragmentTabHost中切换Fragment保存状态
import android.content.Context; import android.content.res.TypedArray; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.s
萬物並作吾以觀復
2018-09-13
1.1K0
Android4.4运行过程中闪退java.lang.NoClassDefFoundError
上周五项目测试时发现一个奇怪的Bug,项目中依赖了一个第三方框架,但是在android4.0-4.4.4之间的系统中运行会直接闪退,抛出错误异常为java.lang.NoClassDefFoundError。 第一次遇到这样的问题,google了好久找到了以下几个原因: 该异常表示找不到类定义,当JVM或者ClassLoader实例尝试装载该类的定义(这通常是一个方法调用或者new表达式创建一个实例过程的一部分)而这个类定义并没有找时所抛出的错误。 [解决方案]:NoClassDefFoundError异常一般出现在编译环境和运行环境不一致的情况下,就是说有可能在编译过后更改了Classpath或者jar包所以导致在运行的过程中JVM或者ClassLoader无法找到这个类的定义。 1.分dex包编程,如果依赖的dex包删除了指定的类,执行初始化方法时将会报错; 2.使用第三方SDK或插件化编程时,动态加载或实例化类失败将会报错; 3.系统资源紧张时,当大量class需要加载到内存的时候,处于竞争关系,部分calss竞争失败,导致加载不成功; 4.装载并初始化一个类时失败(比如静态块抛 java.lang.ExceptionInInitializerError 异常),然后再次引用此类也会提示NoClassDefFoundErr 错误; 5.手机系统版本或硬件设备不匹配(如ble设备只支持18以上SDK),程序引用的class在低版本中不存在,导致NoClassDefFoundErr 错误。 6.so文件找不到,设备平台armeabi-v7a,但是我的so库是放在armeabi中的,解决方法新建一个armeabi-v7a包,并且把armeabi的文件拷贝过来. 但是,在实际的定位问题的过程中发现并不是总的方法数超出65535,也并不是class竞争失败,最后的问题出在解决方案5,引用的class在低版本中不存在或者说实现可能不同了。 在这个第三方框架的webView里我调用了
萬物並作吾以觀復
2018-09-13
1.3K0
安卓运动圆环自定义View
记得这个东西原来有个同事问过我,当时正在自学自定义View和属性动画这一块,对这个功能也没有写过,所以就google了一下,发了几个类似效果的github项目给朋友,今天礼拜天难得有心情写写代码,所以想想实现一下这个自定义View的效果。 首先,我们从这个gif的效果图中就可以得知这个自定义View我们需要哪些自定义属性,内部圆环的颜色、外部圆环的颜色、圆环的宽度、字体的大小、颜色,话不多说,直接撸码。
萬物並作吾以觀復
2018-09-13
7400
OkHttp's NullPointerException in HttpUrl.class
今天测试在小米5.0-6.0的机型中测试发现一个空指针的异常,经过排查后发现OkHttp的请求参数不能为null,这个请求接口会上传当前机型的手机号、ip地址和其他的一些物理参数,当没有获取成功时就返回null,所以对于参数进行判空,否则就赋值为 parameter = “”;
萬物並作吾以觀復
2018-09-13
1.5K0
NDK开发环境配置
1,新建项目添加C++支持,让Android Studio自动生成相关的配置文件 2,设置生成的.SO库名和相应的平台库 在配置build.gradle文件中,这里的build.gradle是指app模块下的build.gradle,不是整个工程的build.gradle文件。在模块的build.gradle的defaultConfig下加入以下ndk配置:
萬物並作吾以觀復
2018-09-13
8590
TextView中DrawableXXX图片无法设置大小的解决方案
在开发过程中我们往往会遇到图片旁边带文字的布局,这种布局有些比较Low的开发会直接用一个ImageView和TextView,有经验的会给TextView设置DrawableLeft、DrawableRight等等属性,一个View搞定,但是这个属性设置图片是无法控制大小的,在xml里面,当然在Java代码里是可以设置的。
萬物並作吾以觀復
2018-09-13
4.5K1
Android LayoutInflater的用法详解
相信我们在开发过程中肯定接触过LayoutInflater,比如ListView的适配器里的getView方法里通过LayoutInflater.from(Context).inflater来加载xml布局,在Fragment里的onCreateView里面也是一样,加载布局一共三种方法。 1,在Activity里面调用getLayoutInflater() 2, 通过LayoutInflater.from(context).inflater() 3, context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)) 以上的三种方式从实现上都是一样的,Activity里面的getLayoutInflater()实际上调用的是PhoneWindow的实现,而PhoneWindow里源码的处理是LayoutInflater.from(context).inflater(),往下查找最终调用context.getSystemService。 context.getSystemService是Android里一个比较重要的api,是Activity的一个方法,根据传入的Name来取得对应的Object,然后转换成相应的服务对象。以下是系统相应的服务。 传入的Name返回的对象说明 WINDOW_SERVICE WindowManager 管理打开的窗口程序 LAYOUT_INFLATER_SERVICE LayoutInflater 取得xml里定义的view ACTIVITY_SERVICE ActivityManager 管理应用程序的系统状态 POWER_SERVICE PowerManger 电源的服务 ALARM_SERVICE AlarmManager 闹钟的服务 NOTIFICATION_SERVICE NotificationManager 状态栏的服务 KEYGUARD_SERVICE KeyguardManager 键盘锁的服务 LOCATION_SERVICE LocationManager 位置的服务,如GPS SEARCH_SERVICE SearchManager 搜索的服务 VEBRATOR_SERVICE Vebrator 手机震动的服务 CONNECTIVITY_SERVICE Connectivity 网络连接的服务 WIFI_SERVICE WifiManager Wi-Fi服务 TELEPHONY_SERVICE TeleponyManager 电话服务
萬物並作吾以觀復
2018-09-13
8800
Visual Studio 控制台中文乱码Bug
对vs不是很熟,百度了一下,有的告诉你设置编码格式,还有的让你去下载一个插件ForceUTF8 ,然后都是辣鸡,并没有卵用,最后解决在控制台上方的白色区域右键选择默认值,然后选择选项,设置简体中文。
萬物並作吾以觀復
2018-09-13
1.8K0
点击加载更多
社区活动
【纪录片】中国数据库前世今生
穿越半个世纪,探寻中国数据库50年的发展历程
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档