- 博客(84)
- 资源 (1)
- 收藏
- 关注
原创 ThreadPoolExecutor线程池的简单介绍
在编程中经常会使用线程来异步处理任务,但是每个线程的创建和销毁都需要一定的开销。如果每次执行一个任务都需要开一个新线程去执行,则这些线程的创建和销毁将消耗大量的资源,并且线程都是“各自为政”的,很难对其进行控制,更何况有一堆的线程在执行。这时就需要线程池来对线程进行管理,通过线程池中线程的复用,减少创建和销毁线程的性能开销,也能控制线程池中的并发数,否则会因为大量的线程争夺CPU资源造成阻塞。1...
2020-01-20 16:25:05
428
原创 Synchronized的基本使用
Synchronized的作用简单来说:就是能够保证在同一时刻最多只有一个线程执行该段代码,已达到保证并发安全的效果。地位:1、Synchronized是Java的关键字,被Java语言原生支持2、是最基本的互斥同步手段3、是并发编程中的元老级角色,是并发编程中必学内容不使用Synchronized带来的后果示例:两个线程同时操作一个变量,实现不断累加的效果。public clas...
2020-01-08 14:23:42
401
原创 Android Notification 通知的使用,不同版本兼容问题
Notification可以让我们在获取消息的时候,在状态栏、锁屏界面来显示相应的信息。由于不同厂商对Notification做了深度定制,导致部分属性设置了没有效果;而且随着Android 版本的不断升级,不得不去解决Notification的兼容问题。由于目前市场上手机的系统版本基本都在Android4.4以上,所以Android4.4之前版本就不需要考虑了。参考文章:[https://w...
2019-12-19 14:17:17
2801
原创 SwipeRefreshLayout 下拉刷新、上拉加载的使用
一、SwipeRefreshLayout简单介绍1、SwipeRefreshLayout是Google推出的刷新控件。 2、可以设置下拉刷新的高度,达到一定高度时才会刷新 3、使用该控件实现刷新时,需要在这个布局里包裹可以滑动的子控件,如ListView等,并且只能有一个子控件。 4、SwipeRefreshLayout只实现了下拉刷新功能,上拉加载需要自定义实现二、SwipeRef...
2018-03-20 11:20:44
5914
2
原创 Logger: Android日志系统第三方库
1、logger介绍Logger的出现简化了我们开发过程中打印Log的繁琐,源于他的过滤,使得打印的日志更加清晰明了,增加了可读性。功能:打印线程的信息打印类的信息打印方法的信息可以打印list、map、json、xml不必每次输入TAG信息过长会自动换行从日志直接跳转到源码2、logger使用2.1 导入依赖 implementation 'c
2018-01-15 18:15:54
4553
1
原创 Android studio 统一管理依赖版本号
方式一(推荐)1.在根目录下的build.gradle文件下添加 ext{ …. } 中的内容buildscript { repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.0.1'
2017-12-12 17:34:51
2837
1
转载 将java源码打成jar包
方法一:通过jar命令jar命令的用法:下面是jar命令的帮助说明:用法:jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...选项包括: -c 创建新的归档文件 -t 列出归档目录 -x 解压缩已归档的指定(或所有)文件 -u 更
2017-04-07 20:13:07
575
原创 Android studio2.3来了,也带来不少坑:gradle编译不通过,无法运行到小米手机上。。。
Android studio 更新到2.3版本,随之更新下来的gradle版本是3.2的,升级完之后一直处于Refreshing Gradle Project状态,因为android studio 2.3允许最低的gradle最低版本为3.3 。所以自己手动下载了gradle-3.3。离线包下载地址:http://services.gradle.org/distributions/grad
2017-03-20 14:22:26
1399
原创 activity生命周期及横竖屏切换
直接上结论:1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次3、设置Activity的android:configChanges="
2017-02-13 13:47:42
569
原创 Android:判断手机是否安装了QQ或者微信
public static boolean isWeixinAvilible(Context context) { final PackageManager packageManager = context.getPackageManager();// 获取packagemanager List pinfo = packageManager.getInstalled
2017-01-22 10:36:37
3712
2
原创 Android系统设置---android.provider.Settings
调用Android系统项,可以用隐式意图去打开。//设置界面Intent intent=new Intent(Settings.ACTION_SETTINGS);startActivity(intent);常见的系统设置(android.provider.Settings) 常量值 对应的含义 ACTION_ACCESSIBILITY_SETTINGS 可访问性 ACTION_
2017-01-03 15:05:42
3546
原创 关于EditText获取焦点,是否弹出软键盘的那些事
在开发过程中,当activity中包含edittext控件时,它会自动获取焦点,然后弹出软键盘,但我们有时不希望出现这种情况,所以只要不让edittext获取焦点即可。1、在布局中设置android:focusable="false" android:focusableInTouchMode="false" 也可以在edittext所在的父布局中进行拦截2、在Manifes
2016-12-29 10:25:11
1493
原创 Android 版本更新下载自动安装APK,并解决Android6.0安装失败的问题
现在APP都有版本更新的功能,有的是跳转到浏览器进行下载,感觉比较麻烦,用户体验也不好,简便的方法就是直接下载安装即可。即使用Android自带的DownManager,通过启动一个后台服务进行下载,下载完成之后以广播的形式通知用户安装,方便很多。比较闹心的还是6.0权限的问题,下载安装需要一个路径,也就需要读写SD卡权限,不过发现一个问题就是:如果自己不定义一个路径,6.0手机下载完成之后,并没有
2016-11-21 15:03:14
15409
16
转载 Android studio 炫酷的Log日志打印
一、 先看效果二、设置File->Settings 或Ctrl + Alt +S找到 Editor -> Colors &Fonts -> Android Logcat 或在上面的搜索框中输入Logcat点中Verbose , Info, Debug等选项,然后在后面将Use Inberited attributes 去掉勾选再将 Foreground 前的复选框选上,
2016-11-15 23:19:01
2347
原创 通过remoteViews自定义Notification通知栏的布局
remoteViews,是一种远程view,通过跨进程更新自己的界面,主要用于通知栏和桌面小部件的开发过程中。1、自定义Notification布局public class MainActivity extends Activity implements View.OnClickListener { private Button btn_one; private Notificatio
2016-11-10 19:24:51
2731
原创 Fresco 一个强大的图片加载框架
1.Image Pipeline Fresco 中设计有一个叫做 Image Pipeline 的模块。它负责从网络,从本地文件系统,本地资源加载图片。为了最大限度节省空间和CPU时间,它含有3级缓存设计(2级内存,1级磁盘)。 2.Drawees Fresco 中设计有一个叫做 Drawees 模块,它会在图片加载完成前显示占位图,加载成功后自动替换为目标图片。当图片不再显示在屏幕上时,它会
2016-11-04 15:41:01
691
原创 Android 沉浸式状态栏实现及细节处理
谈到沉浸式,好多应用都在使用,解决方案要么就是状态栏透明化,要么就是状态栏改为跟主题颜色一致不过版本4.4和5.0显示效果有一定的差异,所以代码中要对手机版本做下判断,从源码中可以看出5.0之前的版本,状态栏的高度是25不多赘述,看代码吧:public void initTransparencyTitle(int color) { if (Build.VERS
2016-10-21 13:43:17
584
原创 从0开始学习 GitHub 系列之:向GitHub 提交代码
文章链接:1.http://mp.weixin.qq.com/s?__biz=MzA4NTQwNDcyMA==&mid=2650661735&idx=1&sn=9aceac07d272e9202d1b5294f857a5ff&scene=21#wechat_redirect&ADUIN=1044637771&ADSESSION=1476681269&ADTAG=CLIENT.QQ.5497_.
2016-10-17 20:01:19
574
转载 Android 5.0之后隐式声明Intent 启动Service引发的问题
一.概述 Android系统升级到5.0之后做了不少的变化(5.0变化),开发人员一定要注意这些变化,要不然就有的折腾了.这次最大的变化应该是把Dalvik虚拟机改成了ART(Android Runtime),后续会专门讲解这一块.其他的都是一些零碎的问题,例如前段时间发了一篇Android 5.0之后修改了HashMap的实现(传送门).这篇主要讲一下遇到跟Service
2016-10-07 18:23:42
703
原创 Android Studio开发环境创建aidl文件,并生成相应的java文件
AndroidStudio的aidl文件默认放在src/main/aidl目录下,aidl目录和java目录必须同级别,否则将找不到定义的接口在java目录上右键,创建一个aidl文件,此文件会默认生成到aidl目录下。同时必须要指明包名,包名必须和java目录下的包名一致。Model类必须要实现Parcelable接口!如果aidl
2016-10-07 18:01:25
2313
转载 Android中Release版本去掉Log的方法
文章转自:http://blog.youkuaiyun.com/hp910315/article/details/52488474一、自定义BuildConfig字段在gradle配置文件中,定义LOG字段,默认为truebuildConfigField "boolean", "LOG", "true"同步一下工程,查看app/build/generated/source/Bu
2016-09-23 04:01:26
2943
App研发录—架构设计,Crash分析和竞品技术分析
2017-10-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人