
Android
享阅工作室
本人多年软件开发和管理经验,在多家互联网公司担任过高级软件开发、架构师、技术经理、技术总监等。工作认真负责,态度诚恳严谨,思维活跃,勇工并挑战解决项目研发中的难题。主要研究方向移动端和前端开发,包括RN、Flutter等跨平台开发以及Android、Vue、React、Node.js、SpringBoot等都有所研究。生活中爱好广泛,乐观向上,易于与不同类型人群沟通,能在较大的压力下保持良好的工作心态,将百分百的热情投入到每一天的每一分钟。
展开
-
Janus 签名机制漏洞
什么时Janus 签名机制漏洞?检测 App 程序是否存在 Janus 签名机制漏洞。 Google 披露了一个名为“Janus”的安卓漏洞(漏洞编号:CVE-2017- 13156),该漏洞可以让攻击者绕过安卓系统的 Signature scheme V1 签名 机制,用篡改过的 APK 覆盖原有的应用,并可访问原应用所有的数据,直接 对 App 进行篡改。由于安卓系统的其他安全机制也是建立在签名和校验基础 上的,所以可以说该漏洞相当于绕过了安卓系统的整个安全机制。该漏洞的影响范围?安卓原创 2022-01-04 11:06:44 · 3628 阅读 · 0 评论 -
判断App是否在前台运行
// Android开发中,有时候需要判断App是否在前台运行。 代码实现如下:[java] view plaincopyprivate boolean isRunningForeground(Context context) { ActivityManager am = (ActivityManager) context.ge转载 2015-01-05 17:52:15 · 550 阅读 · 0 评论 -
Android多屏幕适配问题
总结的一些关于屏幕适配的问题一、基本概念 屏幕大小(screen size) –屏幕的实际大小,用屏幕对角线长度来衡量(比如3.4寸,3.8寸)。android把屏幕分为以下4种:small,normal,large,extralarge。怎么判断? 屏幕密度(Screen Density) - 一块实际的屏幕区域有多少个像素,一般用dpi衡量(每原创 2015-01-05 16:08:25 · 627 阅读 · 0 评论 -
Eclipse项目迁移到Android Studio中
之前开发一直使用Eclipse,现在想使用一下Android Studio 1.0,因为感觉Android Studio可以使用Gradle很容易的管理项目。所以现在想把Eclipse项目迁移到Android Studio中来。所以在网上找了一些资料,现在把迁移步骤记录一下,以防忘记。 如果你之前有用Eclipse做过安卓开发,现在想要把Eclipse中的项目导入到Andr原创 2015-01-03 11:23:40 · 591 阅读 · 0 评论 -
整理的一些Android模拟器的一些常用快捷键
Home键(小房子键):在键盘上映射的就是home键,这倒是很好记。Menu键:用于打开菜单的按键,在键盘上映射的是F2键,PgUp键同样可以。另外,看英文原文的意思,貌似这个键在某些机型上会被设计为左软件(left softkey)Start键:这个键在模拟器和G1真机上我都没有找到到底是哪个键。映射的是Shift+F2或PgDn,某些机型会被设计为右软键(right softk原创 2015-01-03 11:14:05 · 553 阅读 · 0 评论 -
判断桌面快捷方式是否已经创建
一般情况况下为/*** 判断桌面是否已经创建了快捷图标* * @param context* @param packageName* @return*/public static boolean getIsOnDesktopByPkgName(Context context, String packageName) {final ContentResolver原创 2014-11-18 16:19:48 · 977 阅读 · 0 评论 -
Android View绘制的流程
要知道,任何一个视图都不可能凭空突然出现在屏幕上,它们都是要经过非常科学的绘制流程后才能显示出来的。每一个视图的绘制过程都必须经历三个最主要的阶段,即onMeasure()、onLayout()和onDraw(),下面我们逐个对这三个阶段展开进行探讨。整个View树的绘图流程是在ViewRoot.java类的performTraversals()函数展开的,该函数做的执行过程可简单概况为:翻译 2014-09-30 13:40:03 · 495 阅读 · 0 评论 -
Android 改变statusbar背景-沉浸式状态栏与导航栏
最近在GitHub上看到一个改变状态栏背景的源代码,所以记录一下,以备后面的项目使用。 项目地址:SystemBarTint:点击打开链接 可以设置 statusbar 背景,原理是在 Window 的 DocView 添加 view,大家可以下载这个项目学习如何使用。 其实,Android 4.4 增加了透明状态栏与导航栏的功能,处女座的福音原创 2016-03-04 16:14:36 · 1672 阅读 · 0 评论 -
收集大家常用的一些Android代码
这里收集了大家常用的一些Android代码,持续更新中,内容来自自己的平时积累和网络上看到的文章,部分原文地址在最下方。如有错误欢迎指正。里面可能会有重复内容,请忽略。文章出自:https://github.com/jiang111/awesome-android-tips/blob/master/README.mdsetBackgroundResource(0) 可以转载 2016-03-18 10:44:45 · 923 阅读 · 0 评论 -
RecyclerView简单使用
RecyclerView相比于ListView, 在回收重用时更具有灵活性, 也就是低耦合, 并且提供了扩展. 加载多个视图时, 应该多用RecyclerView代替ListView.那么我们来看看这东西应该怎么用? 比如生成一个瀑布流的视图.瀑布流首先我们从一个HelloWorld写起, 看看如何构建一个RecyclerView.1. 依赖库Gradle配置,转载 2016-03-20 18:50:58 · 312 阅读 · 0 评论 -
CoordinatorLayout使用方法
作为Android的控件, CoordinatorLayout已经加入最新的HelloWorld项目中, 也是Material风格的重要组件, 协调(Coordinate)其他组件, 实现联动. 那么让我们来看看这个动画效果怎么用吧?1. 准备首先新建HelloWorld项目.在项目的build.gradle文件中, 引入头像控件库和CardView库, 在本例中会使用原创 2016-03-20 22:50:12 · 1242 阅读 · 0 评论 -
细说单例在android中的应用
Singleton模式可以是很简单的,它的全部只需要一个类就可以完成(看看这章可怜的UML图)。但是如果在“对象创建的次数以及何时被创建”这两点上较真起来,Singleton模式可以相当的复杂。譬如涉及到DCL双锁检测(double checked locking)的讨论、涉及到多个类加载器(ClassLoader)协同时、涉及到跨JVM(集群、远程EJB等)时、涉及到单例对象被销毁后重建等。原创 2015-12-15 17:40:22 · 440 阅读 · 0 评论 -
HTTP请求和相应
1、什么是Http HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC,RFC 1945定义了HTTP/1.0版本。其原创 2016-03-23 17:15:33 · 804 阅读 · 0 评论 -
Android 开发值得订阅的日报和周刊
Android Weekly Android Weekly 是由一群国外知名的Android 开发者维护,分享的内容不仅仅只有干货,而且还有最新的技术分享,也是Android 开发圈子最早,最有名的周报。如果想看中文版,请移步知乎专栏——《Android Weekly - 知乎专栏》。Android开发技术周报Android开发技术周报是由@脉脉不嘚語 维护更新,截止到现在,已原创 2016-06-22 16:30:14 · 383 阅读 · 0 评论 -
Android中通过反射获取资源Id(特别用在自己定义一个工具将其打成.jar包时,特别注意资源的获取)
在我转载的一篇名为:Android中利用java反射机制Reflect 介绍了,什么是反射机制,以及他的具体使用。接下来我将简单介绍一下,在Android中是如何通过反射获取资源的ID的。废话不说,先看代码:在将自己写的工具打成.jar包的时候,有时候会需要引用到res中的资源,这时候不能将资源一起打包,只能通过反射机制动态的获取资源.[java] vie原创 2016-06-23 10:31:44 · 984 阅读 · 0 评论 -
果用户在onPostExecute调用之间按了返回按钮BadTokenException
因为使用了AsyncTask 异步线程在线程完成以后的onPostExecute方法里面弹出窗口。 这个时候如果用户在onPostExecute调用之间按了返回按钮,activity已经onDestory了, 那么就会报出android.view.WindowManager$BadTokenException: Unable to add window -- token android.o转载 2015-03-31 14:28:01 · 638 阅读 · 0 评论 -
AsyncTask的RejectedExecutionException异常
当运行的AsyncTask 实例数量过多的时候会引发RejectedExecutionException异常。Java代码 for (int i = 0; i 150; i++) { demotask = new DemoTask(); demotask .execute(); } 所以如果是创建特别原创 2015-03-31 14:39:26 · 640 阅读 · 0 评论 -
Android Process and Thread 进程和线程
http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html当一个应用程序组件开启,而该应用程序没有其他组件在运行,那么Android系统会为这个应用程序启动一个新的Linux进程,一个单独线程来执行这些操作。一般来说,一个应用程序中的所有组件应该是跑在同一个进程和线程(主线程,calle转载 2015-03-31 15:04:13 · 626 阅读 · 0 评论 -
最新AndroidStudio使用教程
什么是Android Studio?Android Studio是基于IntelliJ的最新Android开发工具。与Eclipse相比,主要下面几点好处:使用gradle编译系统,其最大的特点,Gradle编译系统所带来的好处:更简单的依赖管理,只需要一行依赖配置,Gradle就会帮我进行下载,引入,关联等等操作Android Studio与命令行的编译方式一样能同时生成原创 2015-12-22 18:32:10 · 1983 阅读 · 0 评论 -
Failed to configure driver: unknown error. Failed to open driver
新版Android IDE开发工具Android stutdio ,打开android 模拟器特别慢,为解决该问题我们会先安装 Intel 加速器 HAXM,安装过程中可以会出现如下错误"Failed to configure driver: unknown error. Failed to open driver" 有以下几个步骤可以原创 2015-11-25 13:07:20 · 3304 阅读 · 0 评论 -
android重要的依赖库与SDK收集
1、必选的库:gradle-retrolambda——Android的lambda表达式插件fresco——Android最屌图片加载库material-dialogs——Material Dialog向下兼容库material-ripple——Ripple向下兼容库fastjson——最快JSON解析butterknife——View注解库和配套插件android-b原创 2015-11-23 17:30:30 · 963 阅读 · 0 评论 -
android 配置Material Design主题(沉浸式状态栏的实现)
对于不遵守Material Design的项目可以无视此文。1.先在color.xml中写好需要的颜色: #ff5722 #673AB7 #311B92 #fff #888888 #dddddd #999999 注意:color.xml是配色表。应该是描述颜色而不是对字体颜色,背景颜色等的定义。这样能防止相近的颜色原创 2015-11-23 17:24:55 · 1605 阅读 · 0 评论 -
AndroidStudio签名
微信等一些SDK运行时需要检查签名是否正确。所以在debug模式时也必须用正式KEY签名。 Android Studio 上对 apk 进行签名方法无外乎两种 1、通过任务栏上的 Build -> Generate Signed Apk 进行签名,此方法简单,但不适于批量打包签名。 2、在 build.gradle 添加 tasksigningC原创 2015-11-23 17:17:46 · 500 阅读 · 0 评论 -
Cannot add header view to list -- setAdapter has already been called.
java.lang.IllegalStateException: Cannot add header view to list -- setAdapter has already been called. at android.widget.ListView.addHeaderView(ListView.java:283) at android.widget.ListView.ad原创 2015-10-10 15:49:16 · 802 阅读 · 0 评论 -
解决Android中Handler警告
1、Handler 在使用Handler时经常习惯性的写成如下形式,结果系统就会给出一种警告。This Handler class should be static or leaks might occur:IncomingHandler。虽然不影响编译和运行,但是会有一定的风险。让人感觉很不爽。 @SuppressLint("HandlerLeak") Handl原创 2015-09-30 11:39:31 · 3421 阅读 · 0 评论 -
引起内存泄露的原因:CheckList
1、单例不可取:public class Singleton{ private static Singleton instance; private Context mContext; private Singleton(Context mContext){ this.mContext = mContext; } pu原创 2015-09-29 17:52:05 · 1058 阅读 · 0 评论 -
Android图片加载与缓存开源框架:Android Glide
官方语言: Android Glide 是一个高效、开源、 Android设备上的媒体管理框架,它遵循BSD、MIT以及Apache 2.0协议发布。Glide具有获取、解码和展示视频剧照、图片、动画等功能,它还有灵活的API,这些API使开发者能够将Glide应用在几乎任何网络协议栈里。创建Glide的主要目的有两个,一个是实现平滑的图片列表滚动效果,另一个是支持远程图片的获取、大小调整和展示。原创 2015-09-09 13:24:32 · 1014 阅读 · 0 评论 -
Activity启动模式任务堆栈
Activity中的任务是与用户交互的一组Activity的集合,Activity会被按打开顺序安排在一个堆栈里。任务栈:并不是Activity是Activity的引用(内存地址) standard 标准模式 每次激活Activity时都会创建Activity,并放入任务栈中,默认模式 singleTop 独享堆栈顶端 如果在任务的栈顶正好存在该原创 2015-04-14 17:46:10 · 597 阅读 · 0 评论 -
Android中的Parcel机制和Serialize机制
实现了Bundle传递对象, 使用Bundle传递对象,首先要将其序列化,但是,在Android中要使用这种传递对象的方式需要用到Android Parcel机制,即,Android实现的轻量级的高效的对象序列化和反序列化机制。 JAVA中的Serialize机制,译成串行化、序列化……,其作用是能将数据对象存入字节流当中,在需要时重新生成对象。主要应用是利用外部存储设备保存对象状态原创 2015-04-14 17:21:41 · 902 阅读 · 0 评论 -
Android开发性能优化大总结
一.Android相关1. 采用硬件加速,在androidmanifest.xml中application添加android:hardwareAccelerated="true"。不过这个需要在android 3.0才可以使用。android4.0这个选项是默认开启的。2. View中设置缓存属性.setDrawingCache为true.3. 优化你的布局。通过Androi原创 2015-04-14 16:45:40 · 431 阅读 · 0 评论 -
Android的log里这代表什么:Activity idle timeout for HistoryRecord
测试Android程序时,在logcat中见到类似下面的log内容: WARN/ActivityManager(104): Launch timeout has expired, giving up wake lock! WARN/ActivityManager(104): Activity idle ti转载 2015-04-09 18:51:53 · 1828 阅读 · 0 评论 -
AsyncTask使用
AsyncTask的实现原理就是封装了的线程池,具体见AsyncTask实现原理。 在1.5中初始引入的时候, AsyncTask 执行( AsyncTask.execute() )起来是顺序的,当同时执行多个 AsyncTask的时候,他们会按照顺序一个一个执行。前面一个执行完才会执行后面一个。这样当同时执行多个比较耗时的任务的时候 可能不是您期望的结果,具体情况就像是ex原创 2015-03-31 16:09:15 · 368 阅读 · 0 评论 -
Android黄色警告汇总
之前分享过一片解决Android中Handler警告的文章,今天继续分享一下有关黄色警告修改的一些经验技巧。1、String day = String.format("%4d-%02d-%02d", c.get(Calendar.YEAR), c.get(Calendar.MONTH) + 1, c.get(Calendar.DAY原创 2015-12-24 16:01:51 · 7013 阅读 · 0 评论