-
Android 中Fragment的自动重建
Fragment常见的两种重建方式,一种是通过调用setRetainInstance来通知系统在重建Activity(例如屏幕配置改变)时保留此Fragment;另一种方式是系统在重建Activity时自动重建Fragment,典型例子是FragmentActivity对管理的Fragment的重建。setRetainInstance直接参考官方文档的解释: Control whether a fragment instance is retained across Activity r...…
-
Android NestedScrolling解决滑动冲突问题(3) - 项目实战
实际需求在前面的两片文章中我们了解了 NestedScroll 的相关接口及一般处理逻辑。在本篇文章中就实现一个具体的联合滑动需求。Android中经常在布局中嵌入 WebView 来展示网页内容,而且WebView内部还有交互逻辑(滚动之类的),如果外部布局也要处理滚动逻辑,就会有滑动冲突,这种场景在实际项目开发中很常见,例如在含有 AppBarLayout 的 CoordinatorLayout 中嵌入一个 WebView , WebView 底部再放一个 footer 放置收藏按钮等...…
-
Android NestedScrolling解决滑动冲突问题(2) - fling问题与NestedScroll++
滑动的处理在前一篇文章中,我们分析了解决滑动冲突问题的 NestedScroll 接口,也给出了解决此类问题的一般性方案:NestedScrollingChild侧NestedScrollingChild(后面简称NC)处理MotionEvent(一般在onTouchEvent中,如果是ViewGroup还要注意onInterceptTouchEvent的处理,拦截滑动相关的MotionEvent事件),分析用户滑动操作。在滑动开始时,调用startNestedScroll找到联动此次滑动...…
-
Android NestedScrolling解决滑动冲突问题(1) - 相关接口
当父View及子View都可以滑动,并且滑动方向一致时(例如CoordinatorLayout内嵌RecyclerView或者Webview),滑动冲突的解决就需要依赖于Android为我们提供的NestedScrolling接口。NestedScrolling 接口分为两个部分:NestedScrollingParent 及 NestedScrollingChild。为方便描述,以下简称NestedScrollingParent为NP, NestedScrollingChild为NC。N...…
-
使用Digital Ocean搭建Shadowsocks代理服务器
由于 GFW 的限制,国内对一些海外网站的访问受到限制,使用代理是一种常见的突破方式,但是可用的免费代理很少并且服务不稳定,收费代理比较昂贵并且高峰时段偶尔带宽很低甚至不可用。如果希望有高可用并且带宽稳定的代理服务器,使用海外云主机自己搭建是一种比较好的途径。笔者使用过不同的云主机商(阿里云香港、美国节点;腾讯云香港、美国节点;Digital Ocean 美国节点)的云主机,以及不同的代理服务器( PPTP、L2TP、OpenVPN、Shadowsocks)。最终从价格、性能、带宽、稳定性...…
-
Android获取外置SD卡读写路径
1. 外置SD卡的一些问题1.1 关于外置SD卡上的读写路径Android 4.4及以上版本,应用的外置SD卡读写路径被限定在固定路径上(外置SD卡根路径/Android/data/包名/files)。Android4.4以下版本,申请了外置SD卡读写权限的应用在整个外置SD卡上都有读写权限。1.2 关于外置SD卡路径另外Android没有提供获取外置SD卡路径的API(getExternalStorageDirectory()获取的实际是内置SD卡路径)。2. 获取应用在外置SD卡读写根...…
-
Android防止Service被杀死
1. Service被杀死的两种场景1.2 系统回收在系统内存空间不足时可能会被系统杀死以回收内存,内存不足时Android会依据Service的优先级来清除Service。1.2 用户清除用户可以在”最近打开”(多任务窗口、任务管理窗口)中清除最近打开的任务,当用户清除了Service所在的任务时,Service可能被杀死(不同ROM有不同表现,在小米、魅族等第三方产商定制ROM上一般会被立即杀死,在Android N上没有被立即杀死)。2. 解决方案对于第一种场景(系统回收),如果不用...…
-
Java下合并多个文件
在实际项目中,在处理较大的文件时,常常将文件拆分为多个子文件进行处理,最后再合并这些子文件。Java中合并子文件最容易想到的就是利用BufferedStream进行读写。利用BufferedStream合并多个文件public static boolean mergeFiles(String[] fpaths, String resultPath) { if (fpaths == null || fpaths.length < 1 || TextUtils.isEmpty(re...…
-
在Android Studio中进行NDK开发的一般流程
1 在类中声明native方法2 在 app/src/main 下创建 jni 目录3 在 app/src/main/java 下运行命令 javah -jni -d ../jni com.path2class.ClassName4 在 app/src/main/jni 下生成了对应的头文件,创建cpp源文件,利用此头文件实现对应的native方法5 在 app 下的 build.gradle 文件中,android->defaultConfig下添加代码:ndk { m...…
-
使用OpenCV Android SDK从摄像头帧实时检测人脸
在配置好 OpenCV Android SDK 之后(具体见前一篇文章Android Studio中使用OpenCV Android SDK),可以使用 OpenCV 封装的接口很方便地进行各种图像处理操作。这里简单介绍如何直接使用 OpenCV 训练的人脸模型直接从摄像头帧检测人脸。1. 新建Android Project这里可以直接使用默认的 Android Studio 项目模板, Activity 选择 Empty Activity 。2. 配置OpenCV Android SDK...…