![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android开发
文章平均质量分 60
ShouCeng
○ 2012年8月开始从事Android开发至今,具备4年以上Android开发经验
○ 完成10多个产品开发工作
○ 独立完成5个App开发上线工作
○ 曾就职于中科院自动化所、中科院计算所、美团网、58集团等公司
○ 硕士,毕业于北京交通大学,专业软件工程
展开
-
fling时无法左右滑动
上下滑动的RecyclerView嵌套可以左右滑动的ViewPager。RecyclerView滑动fling时,希望能够手动左右滑动。我们首先确定fling的触发条件: @Override public boolean onTouchEvent(MotionEvent e) { ...... switch (action) { case MotionEvent.ACTION_UP: { mVelocity原创 2021-07-06 21:01:22 · 172 阅读 · 0 评论 -
ViewPager问题搜集
一、滑动距离设置产品,不,测试任务当前滑动下一页时,需要距离太长。默认系统的距离:try { Field field = ViewPager.class.getDeclaredField("mTouchSlop"); //修改滑动距离 field.setAccessible(true); field.setInt(this, touchSlop); //滑动长度大于150px的时候,ViewPager才进行滑动 }原创 2021-05-24 16:54:44 · 364 阅读 · 0 评论 -
Android静态变量引起的NPE
1、静态变量的优势静态变量位于虚拟机的方法区,静态变量是在类被load的时候分配内存的。当类被卸载的时候才会被销毁。2、静态变量的npe明确一件事,app不是只有在内存不足的情况下被回收,其实当应用被切换成后台的时候长久没使用,也会被系统回收的。比如在应用A页面中突然接到一个电话,在接完电话的时候,应用很可能已经被回收了,此时再次进入A页面时,是系统重新创建的,Application也可能会被重新创建。所以保存在Application、Activity、静态变量都可能为空了。其实Application原创 2020-12-10 11:42:54 · 682 阅读 · 0 评论 -
Android使用bootstrap简单介绍
1、简介开源项目到处都有bootstrap的简介,但仅仅停留在提一提的程度。博主自己写了一个简单的demo,运行效果还不错。这里记录下开发步骤吧。按照惯例先介绍下bootstrap,bootstrap是Twitter推出的前端的一个快速开发漂亮网站的框架,网页的图标和样式都很好看,而这个Android-bootstrap项目就是网页的图标效果到android中来。该项目中自己封装了一些常用前端原创 2015-12-30 10:39:43 · 12688 阅读 · 0 评论 -
关于Fragment的那些事儿
Fragment生命周期:onAttach():当Fragment被加入到activity时被调用(在这个方法中可以获得所在的activity)onCreate(),onCreateView():当activity要得到fragment的layout时,调用此方法,fragment在其中创建自己的layout。onActivityCreate():当activity的onCre原创 2016-05-23 11:21:49 · 497 阅读 · 0 评论 -
Android通知Notification详解
Notification的使用大体步骤Notification简介PendingIntent简介使用RemoteViews自定义Notification更新与移除通知设定提示响应附录Notification的使用大体步骤:1、 获取状态通知栏管理 2、 实例化通知栏构造器 3、 设置NotificationCompat.Builder 4、 设置PendingIntent原创 2016-06-20 16:11:15 · 25517 阅读 · 4 评论 -
android webview打开本地图片上传
Webview打开本地图片选择器十分之麻烦,其在安卓系统3x 4x 5x上的行为都不同,处理也不同,所以之前差点崩溃。经过测试和完善,最终其在各个版本上都能完美工作。 直接上代码package com.testandroid.webview;import android.content.Intent;import android.net.Uri;import android.os.Bundle转载 2016-07-26 08:59:23 · 2517 阅读 · 0 评论 -
Node.js实现android的apk版本更新服务器
以下内容仅为android程序员自己测试时搭建的简单测试服务器。 根据一般apk升级步骤: 1. 请求服务器versionCode和本地apk的versionCode比对,如果服务器versionCode大于apk的versionCode,则执行2),否则结束; 2. 弹出对话框,告知用户有新的版本可以更新,用户点击更新,则执行3)开始下载apk,否则结束; 3. 后台下载最新版本的apk。原创 2016-07-13 15:33:01 · 4889 阅读 · 0 评论 -
助你快速搭配 Material Design 配色方案的10款Web工具
在设计 Material Design 的过程中你会发现一个很大的问题,那就是如何大胆、灵活的使用色彩组合。 Material Design 里的调色板工具将色彩描述为“受大胆排列色块并结合柔和的环境、深阴影和亮高光而产生的灵感”。这周我们专门为设计导航的配色类目更新了10款 Google Material Design 专用的配色工具,如果你需要材质设计调色板,这些web工具可以助你一臂之力。下转载 2016-08-04 15:59:30 · 12867 阅读 · 0 评论 -
Android M新的运行时权限开发者需要知道的一切
如果permissions没有影响到用户的隐私,系统就会自动授权。如果权限可能会访问到敏感的用户信息,系统则会要求用户处理这种权限要求。系统permissions被分为两类,normal和dangerous:Normal permissions不会直接触及到用户的隐私,如果你的app已经在Manifest文件中列出了常规权限,系统则会自动授权。dangerous的权限能够给app访问用户可信任的翻译 2016-07-28 16:22:56 · 478 阅读 · 0 评论 -
android开发小tips
1、android.text.TextUtils这个类就能胜任绝任多数的工作,比如:text.TextUtils.isEmpty这个方法判断字符串非null且非空,在对字符串进行判断时可以不必if(str!=null && str.length()>0)这样的判断。 public static CharSequence concat(CharSequence… text) 字符串连接。有很多字符串转载 2016-08-30 16:16:00 · 693 阅读 · 0 评论 -
webview遇到的那些坑与解决方法
1. WebView的内存泄露。这个问题,很难清晰描述,你在谷歌里搜 webview lead memory 能搜到很多结果 甚至还有给谷歌提交的issue 哈哈,我也无法给出一个清晰的答案 在什么时候 什么版本那些手机上一定会出现内存泄露, 但是根据一些monkey结果来看,有时,webview内存泄露的情况还是很严重的,尤其是当你加载的页面比较庞大的时候。解决方案参考下微信和qq的做法,试了一转载 2016-09-05 14:40:09 · 4635 阅读 · 0 评论 -
Android退出所有Activity最优雅的方式
关于退出所有Activity,目前网上比较流行的方式大概有以下几种:① 使用ActivityManager的方式;② 自定义一个Activity集合类的方式;③ 通过发送广播的方式;④ 通过杀死当前应用进程的方式;以上方式的具体实现大家可自行谷歌百度,此处不再赘述。但是这些方式要么不太靠谱,要么有限制,要么不够优雅。今天我们就来说一个简单有效,优雅大转载 2016-01-14 14:31:00 · 8962 阅读 · 0 评论 -
Android开源SlidingMenu的使用
一、SlidingMenu简介SlidingMenu是最常用的几个开源项目之一.GitHub上的开源项目Slidingmenu提供了最佳的实现:定制灵活、各种阴影和渐变以及动画的滑动效果都不错。不过这是一个开源库,要把它作为library引入到你自己的工程里,简单配置一下就可以实现SlidingMenu的效果。二、项目的导入三、具体实现你可以直接继承app这个包中的Sl原创 2016-06-24 09:54:04 · 345 阅读 · 0 评论 -
获取Android屏幕尺寸与密度
术语和概念屏幕尺寸屏幕的物理尺寸,以屏幕的对角线长度作为依据(比如2.8寸,3.5寸)。简而言之,Android把所有的屏幕尺寸简化为四类:超大、大、正常、小。 (small, normal, large, and extra large.)程序可以针对这四种尺寸的屏幕提供三种不同的布局方案,然后系统会负责把你的布局方案以合适的方式渲染到对应的屏幕上,这个过程是不需要程序员转载 2015-11-08 15:11:24 · 2857 阅读 · 0 评论 -
Android一些总结
Android开发也有三年有余了,总想给自己一个总结,给以后的开发指明一个方向。以下是开发的总结,有些是参照大牛。最近一直在看重构方面的书,回头整理一份有用的笔记,我将继续重构自己正在开发的项目,使其能拥抱变化,成为绕指柔的代码。这篇文章会持续更新~原创 2015-12-23 14:18:23 · 458 阅读 · 0 评论 -
数据以文件形式缓存至本地
数据保存形式有多种: 1、数据库;2、sharedpreferences;3、文件的形式4、网络存储方式5、使用contentProvider这次聊聊文件的缓存方式。首先将数据以对象的方式序列化下:/** * Created by Administrator on 2015-12-25. * 基类 */public class Feed implements原创 2016-01-13 09:38:37 · 783 阅读 · 0 评论 -
Android常用开源项目库
开源库网上很多,项目比较常用的整理如下:StaggeredGridView、EventBut、Android-Image-Cache、ImageFilterForAndroid、RESTProvider、Robospice、AndroidSideMenu、AndroidSideMenu、ScreenCap、SlidingMenu、Drag-Sort-ListView、Android-Flip、Android-PullToRefresh、Picasso、Card-UI、SmoothProgressBar、A原创 2016-02-03 18:30:42 · 860 阅读 · 0 评论 -
Android开发规范
• 书写规范• 编码方式统一用UTF-8.AS默认已是UTF-8,只要不去改动就可以了。• 花括号不要单独一行,和它签名的代码同一行。而且,花括号与前面的代码之间用一个空格隔开。• 空格的使用:if\else\for\switch\while等逻辑关键字与后面的语句留一个空格隔开。运算符两边各用一个空格隔开。方法的每个参数之间用一个空格隔开。• 将逻辑相关的代码段用空行隔开,转载 2016-02-28 18:45:50 · 371 阅读 · 0 评论 -
隐藏输入法
点击别处隐藏输入法的方法 @Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { if (this.getCurrentFocus() != null) {原创 2016-02-29 22:11:43 · 408 阅读 · 0 评论 -
android性能优化
Android app性能优化 用Hierarchy Viewer知道是哪一个子View耗时比较多,找到此View的code,那么如何定位到具体某个方法里呢?当然需要traceview工具。Traceview工具十分强大,可以轻松把每个方法占用CPU时间计算出来,找到占用时间最长的方法,然后分析此方法即可。 Lint工具会给出Layout优化提示(既包括图片资源、layout文件转载 2016-02-29 22:14:19 · 424 阅读 · 0 评论 -
android开发建议
Android开发建议• 尽量阅读官方文档,这才是原汁原味、不失真的开发指导;• 即使你认为设计程序是浪费时间,你只是喜欢写程序,至少你也得用思维导图理清思路,思维导图对于帮助你理解设计文档、理清思路有很大的帮助;• 不要用Intent传递大量的数据,这有可能导致ANR或者报异常;• 在退出页面后,系统不一定会及时执行onDestory方法,如果你在onDestory方法里做关转载 2016-02-29 22:15:28 · 475 阅读 · 0 评论 -
WebView的碎片化解决方案:Crosswalk
项目的需要,App内嵌入了很多WebView。但在适配的时候出现了大量的问题,典型的就是小米,WebView兼容性一直都是Android开发的一个大问题。Android4.4-的WebView是基于WebKit内核,虽然android4.4+的WebView采用了chromium的核,但是第三方ROM可能对源生WebView有做修改,导致了很多兼容性问题。各个手机WebView版本不同、内核也会不同原创 2016-04-13 09:28:50 · 2874 阅读 · 0 评论 -
android实现观察者模式的几种方法
观察者模式在 android开发中应用还是非常广泛的,例如android按钮事件的监听、广播等等,在任何类似于新闻-订阅的模式下面都可以使用。从某种意义上面来说android有点像JAVA EE的WEB页面,在都需要提供View层用于进行操作,在多个页面之间传递数据发送通知都是一件很麻烦的事情。在android中从A页面跳转到B页面,然后B页面进行某些操作后需要通知A页面去刷新数据,我们可以通...转载 2016-08-03 16:14:15 · 9463 阅读 · 0 评论 -
android系统架构MVP案例分析
前言首先我们应该避免上帝类,上帝类(比如无所不能的Activity)的维护成本很高,你很难理解正在进行的操作,并且难以测试和扩展,这就是为什么要避免创建上帝类的黄金法则。在Android开发中,如果不考虑架构的话,Activity类往往会越来越大,最大的问题就是在Activity中同时存在业务逻辑和UI逻辑,这会增加测试和维护的成本。目前流行的开发架构有MVC、MVP、MVVM等,起先使用比较多的是原创 2016-09-30 15:49:47 · 910 阅读 · 0 评论 -
Android数据库操作--greenDAO的入门使用
目前android经常用的orm框架主要有greenDAO、OrmLite、AndrORM。其中greenDAO的运行效率最高,内存消耗最少,性能最佳。 greenDAO是一个可以快速将Java对象映射到SQLite数据库的表单中的ORM解决方案。设计的主要目标:一个精简的库;性能最大化;内存开销最小化;易于使用的APIs;对Android进行高度优化。原创 2016-10-17 16:59:49 · 5388 阅读 · 1 评论 -
软键盘遮挡的解决
软键盘遮挡有两类,一类是完全遮挡,一类是遮挡一部分。 为什么会出现遮挡? 软键盘是一个dialog,有InputMethodService创建。当我们点击输入框时,系统会对当前的主窗口进行调整,以便留出相应的空间来显示该Dialog在底部。我们快速过一下源码便得知: InputMethodService继承AbstractInputMethodService,继承Service。 只挑重点过...原创 2018-03-29 16:55:06 · 1538 阅读 · 0 评论 -
发布Android library的依赖
前言jitpack.io()实现 — 此方法配合github使用比较简单。本文主要参考:jitpack官方文档实现的。第一步,创建Library首先需要一个library的项目,比如可以通过Android Studio创建,选择new module–>Android Library即可创建将要发布的library。第二步,添加插件为了能在JitPack上编译,需要添加an...原创 2018-04-22 12:11:10 · 750 阅读 · 0 评论 -
RxLifecycle的使用
RxJava和RxAndroid(https://github.com/ReactiveX/RxAndroid)越来越流行,通过线程调度器很容易控制和切换线程,。但是使用的时候很容易导致内存泄露。Rxlifecycle (https://github.com/trello/RxLifecycle)就是被用来解决由于发布了一个订阅后而没有及时取消Activity/Fragment无法销毁导致的内...原创 2018-07-05 21:03:35 · 1588 阅读 · 0 评论 -
layout_weight的正确姿势
故事的开始是这样子的,起先我布局了一个XML文件: 想要的效果是四个控件平分该LinearLayout。首先考虑使用了layout_weight ,设置四个控件都为1。但我发现最后一个控件好像有点过分,嗯,可能是我的眼镜有问题,于是我去洗了下眼镜(洗手液洗眼镜很干净)。打开模拟器看了下,好像第三个也有点过分。于是我好像发现了什么,于是我又写了一行布局: 严重了我的猜测,是weigh...原创 2018-07-05 21:06:17 · 280 阅读 · 0 评论 -
RecyclerView的高级使用
1、ScrollView嵌入RecyclerView的处理 用NestedScrollView替代ScrollView,如下布局: <android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:...原创 2018-07-05 21:08:47 · 929 阅读 · 0 评论 -
Android 开发之Android Studio
一、插件的安装1、alibaba java coding guidelines 2、codota 3、git安装 4、sonar二、build运行1、初探随着项目变的越来越大,特别是使用了组件化之后,build需要的时间越来越久,越来越慢了。项目现在运行一次40s,一天编译很多次的情况下,无法做任何事,是多么浪费时间。 网上一般有以下几种方式解决: 1)org.g...原创 2018-08-21 15:01:07 · 374 阅读 · 0 评论 -
像Glide一样绑定Activity的生命周期
如何像Glide一样绑定Activity的生命周期呢,本文通过模拟Glide实现一个简单的绑定Activity生命周期的方法。本文尽量使用Glide一样的类名,删除不需要的业务,实现的思想大同小异。1、业务类RequestManager和Glide不同个,我们把业务类实现在RequestManager中,这里有几个生命周期的回调方法:onStart()、onStop()、onDestory(...原创 2018-12-08 15:48:04 · 498 阅读 · 0 评论 -
JNI入门和集成现有的C代码
Android开发JNI流程JNI初始牛刀第一步,环境配置第二步,创建文件MyJNIUtils.java类第三步,生成MyJNIUtils.class类第四步,生成JNI对应的头文件第五步,实现MyJNIUtils.c文件第六步,引入动态库第七步,生成so文件第八步 CMake编写最后一步运行开发已有的c库JNI初始牛刀第一步,环境配置NDK需要下载并配置NDK路径,检测local.prop...原创 2019-08-19 16:11:11 · 434 阅读 · 0 评论 -
图片下拉放大并回弹
通过扩展ScrollView实现,可以设置需要放大的View,放大系数,放大倍数,回弹时间系数package com.test.androidtest.widget;import android.animation.ObjectAnimator;import android.animation.ValueAnimator;import android.content.Context;...原创 2018-03-29 16:47:54 · 749 阅读 · 1 评论 -
Error: Your project contains C++ files but it is not using a supported native build system.
运行Android Studio项目出现这个问题: * What went wrong: Execution failed for task ‘:app:transformClassesWithDexForRelease’. com.android.build.api.transform.TransformException: com.android.ide.common.process.P原创 2017-11-02 10:08:40 · 865 阅读 · 0 评论 -
android studio JNI/NDK的简单使用
最近更新android sdk26(8.0)时看到NDK 15.2.4203891于是就更新了,没想到直接就把D盘干满了,只能删掉D盘一些文件了,其中包括android-ndk-r13b文件。 顺便再运行一遍记录下吧,虽然接触JNI开发的机会不多,但是偶尔有涉及,比如我们把登录的AES秘钥放到了jni里,提高了安全性,比较破解so文件比java难度高些。1、环境配置除了更新上文提到的NDK,还需要原创 2017-10-14 12:59:15 · 517 阅读 · 0 评论 -
在Android中使用比JSON性能高的FlatBuffers
FlatBuffers是google最新针对游戏开发退出的高性能的跨平台序列化工具,目前已经支持C++, C#, Go, Java, JavaScript, PHP, and Python (C和Ruby正在支持中),相对于json和Protocol Buffers,FlatBuffers在序列化和反序列化方面表现更为优异,而且需要的资源更少,更适合大部分移动应用的使用场景。 除了高性能和低内存消转载 2017-01-03 16:07:19 · 1746 阅读 · 0 评论 -
RecyclerView 选择多个item的实现
模仿网易新闻客户端阅读偏好的频道选择,先看实现的页面: 直接上代码:原创 2017-02-17 17:28:40 · 3263 阅读 · 0 评论 -
android时间工具--多久之前
在开发新闻客户端的时候,是在会显示时间是多久之前,比如10分钟前,8小时前,一月前等等。 下面是一个简单的实现:转载 2017-02-16 10:52:51 · 1186 阅读 · 0 评论