自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(1611)
  • 资源 (6)
  • 收藏
  • 关注

转载 ThreadLocal 你真的用不上吗?

中出现了Key为null的Entry,就没有办法访问这些key为null的Entry的value,如果线程迟迟不结束(也就是说这条引用链无意义的一直存在)就会造成value永远无法回收造成内存泄露;在java中,栈内存归属于单个线程,每个线程都会有一个栈内存,其存储的变量只能在其所属线程中可见,即栈内存可以理解成线程的私有变量,而堆内存中的变量对所有线程可见,可以被所有线程访问!是给每个线程分配一个变量(对象),各个线程都存有变量的副本,这样每个线程都是使用自己(变量)对象实例,使线程与线程之间进行隔离;

2022-09-29 09:53:41 10

转载 AppWidget 开发浅析

AppWidget 即桌面小部件,也叫桌面控件,就是能直接显示在Android系统桌面上的小程序,先看图:图中我用黄色箭头指示的即为AppWidget,一些用户使用比较频繁的程序,可以做成AppWidget,这样能方便地使用。典型的程序有时钟、天气、音乐播放器等。AppWidget 是Android 系统应用开发层面的一部分,有着特殊用途,使用得当的化,的确会为app 增色不少,它的工作原理是把一个进程的控件嵌入到别外一个进程的窗口里的一种方法。

2022-09-28 20:21:42 7

转载 widget点击无法响应,Widget开发中遇到的坑

然后呢,我们一般只需要用到onUpdate()方法,这个方法的更新时间,是你在example_appwidget_info配置文件中设置的android:updatePeriodMillis属性决定的,这个地方有个坑,稍候再说。一开始的时候照着官方文档在appwidget_info xml文件里设置了这个属性,在添加到桌面上的时候总是不成功,将这个属性去掉就可以了,不知道这个属性具体怎么用,有知道的麻烦告诉我一声,感激不尽...上面这种写法在应用退出后在有些手机上收不到广播,然后换成下面这种写法。

2022-09-28 14:23:57 10

转载 Widget点击事件

2、用intent实例化一个PendingIntent,调用pendingIntent的getActicity方法来启动另一个Activity。②如果是在onUpdate()方法外(一般为Service内)更新AppWidget界面,则需要定义几个变量。②如果是在onUpdate()方法外(一般为Service内)更新AppWidget界面,则需要定义几个变量。②如果是在onUpdate()方法外(一般为Service内)更新AppWidget界面,则需要定义几个变量。

2022-09-28 14:15:16 8

转载 Android ImageView到底怎么设置圆角图片?背景圆角?控件圆角?图片圆角?占位图圆角?

我早几年前做项目就遇到这样的场景,设置背景之后,在上面加载圆角的图片,但是背景会漏出来,好不容易让UI切图解决之后,占位图又出问题,占位图不是圆角的就把整个布局盖住了,不符合UI的美学,哎,我要吐了。第一种思路:对背景和占位图有需求,最好是找UI切图,对应的比例的圆角背景图和圆角占位图,如果一个项目有多个不同的比例的,不同圆角的设计图,那么可以想象项目中需要导入多少图片,Apk会变大。我们顺便加上圆形图片的绘制,圆角的图片绘制,各自圆角的绘制,和对应的背景的圆角,图片背景与颜色背景设置等一系列功能。

2022-09-28 10:22:41 11

转载 编译线程爆了, gradle 内存 OOM 解决之路

可以看到,我们这次的问题解决思路大概是这样的。从 error 日志排查发现,很有可能跟 transfrom 相关排查项目里面 transfrom 相关的,有没有相关的dump JVM 内存,看线程相关的,观察是否异常debug gradle assemble 任务,观察 线程名包括Thread 的调用堆栈分析 调用堆栈,找到原因结合 gradle 官方代码,查看问题是否已经解决那有没有更快的方法呢?其实如果一开始能确定是 gradle 问题的话,可以直接在 gradle 里面搜索字符串。

2022-09-27 16:49:12 5

转载 13种 Drawable

可绘制对象是指可在屏幕上绘制的图形,可以通过getDrawable(int)等方法来获取,然后应用到 android:drawable 和 android:icon 等属性方法中。下面介绍几种常见的可绘制对象,我会分三个步骤来介绍:1. 介绍一下在XML中的使用方法(会举例说明)。2. 然后介绍一下其属性方法。3. 再以代码的形式来动态实现XML中的同样效果(会举例说明)。位图图像。Android支持三种格式的位图文件:.png(首选)、.jpg(可接受)、.gif(不建议)。

2022-09-26 16:37:24 3

转载 应用前后台切换ProcessLifecycle的坑

信号量>0则这个事件是app内部的,这时不调用app的onPause方法,同时减去1,表示这次的免除机会已经被消费掉。我们的原理是监听Activity的生命周期,而当你在app内部新开一个Activity或者销毁Activity时,都会引起Activity调用onPause,onStop这些方法。由此可知,无论是哪种情况,onPause方法都会最先被调用,如果太长时间没有调用onResume,就认为是退到后台,如果很快onResume就被调用了,那就认为这只是app内部的activity在变化。

2022-09-23 10:20:12 10

转载 java调用kotlin代码编译报错“找不到符号”的问题

链接:https://www.jianshu.com/p/fe7dee409950。这些都试过了,问题依然没解决,包括gradle版本也更换到高版本,问题依旧。商业转载请联系作者获得授权,非商业转载请注明出处。这个类是用kotlin写的,在java中调用,尝试了各种方法,像。至此,加上这行代码后再次编译问题就解决了,特此记录一下。最后在检查kotlin配置的时候,发现。

2022-09-22 20:34:21 21

转载 Kotlin学习十:kotlin中生产者消费者模式

中有多种方法可以实现多线程生产/消费模型(大多也适用于Java)

2022-09-22 19:57:47 17

转载 Kotlin 的锁和多线程同步

作为结论,在 Kotlin 上最好用的线程同步方案首推协程。作者:JeffreyWorld链接:https://www.jianshu.com/p/7dbd035d152d来源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2022-09-22 19:51:11 19

转载 定时器handler使用

【代码】定时器handler使用。

2022-09-21 17:27:41 4

转载 Git: 将TAG推送到Gerrit中的特定分支

如何将标签推送到gerrit?我在gerrit中有一个名为。的分支.现在我想把本地的标签。

2022-09-21 13:46:20 13

转载 还用第三方库管理状态栏吗?Android关于状态栏管理的几种方案实现!

具体的方案是,我们setContentView的时候,把系统的DecorView中的View取出,替换成我们自定义的布局,内部包括一个自定义的状态栏,和一个FramLayout,我们把之前的布局取出添加到我们自定义布局中,然后默认把当前Activity沉浸式之后,当下操作的StatusBar就是我们的自定义StatusBarView了。到此系统状态栏的管理已经能实现绝大部分的效果处理,缺点是实现的方案不统一吗,不同的效果需要不同的方案来解决,如果是别人接手你的项目可能会比较蒙。

2022-09-21 10:48:23 39

转载 你真的完全了解setContentView()么

在createViewFromTag()中我们会通过 tryCreateView()尝试创建View,并且在这里就调用了 mFactory2.onCreateView(parent, name, context, attrs)方法,mFactory2在AppCompatDelegateImpl#installViewFactory()方法中初始化的,他在AppCompatActivity#onCreate()中调用的!在ensureSubDecor() 方法中,我们会初始化系统的布局。恍然大悟,醍醐灌顶!

2022-09-20 20:52:51 17

转载 RelativeLayout相对布局详解

RelativeLayout相对布局在Android UI开发中也应用比较多,虽然它不及LinearLayout使用方便,但某些场景中使用RelativeLayout也是一种很不错的选择。在官网上介绍是一个视图组,在相对位置显示子视图。是用于设计用户界面的非常强大的实用程序,因为它可以消除嵌套视图组并保持布局层次结构平坦,从而提高性能。如果您发现自己使用了多个嵌套组,则可以将它们替换为单个.

2022-09-20 20:11:16 49

转载 RelativeLayout中的baseline

比如,加入两个相邻的TextView,给第二个TextView一个大一点的padding(比如20dp),如果加了layout_alignBaseline到第二个TextView中的话,TextView中的文字"world"会与第一个TextView中的"hello"处于同一水平线,第二个TextView控件是上移了,就好像是"hello"和"world"处于同一条线上,如果没有加layout_alignBaseline,具体看下面效果图。可以看到,它是将上面的控件覆盖了,但是并没有垂直居中。

2022-09-20 20:06:11 4

转载 从 JDK 8 到 JDK 18,Java 垃圾回收的十次进化

G1 GC于JDK 6 update 14作为实验特性引入,从JDK 7 update 4开始正式支持。从JDK 9开始,G1由于其多用性,成了HotSpot JVM的默认垃圾回收器:它非常稳定、成熟,维护也非常活跃,而且一直在改进。那么,G1是如何在吞吐量和延迟之间进行平衡的呢?一项关键技术就是分代垃圾回收。该技术利用了一个特点:最近分配的对象很可能可以立即回收(即它们“死亡”得更快)。所以G1(以及其他分代式GC)将Java的堆分为两个区域:一个叫做“青年代”,用于存放刚刚分配的对象;

2022-09-20 14:03:47 146

转载 Task list not built during sync

的task,发现找不到Task。这是因为AS默认关闭了。把红色标记的地方的√去掉。

2022-09-20 13:46:35 12

转载 在widget实现复杂布局(Listview,GirdView)以及RemoteViewsService、RemoteViewsFactory的用法

了解过widget的同学应该知道实现widget,首先需要重写AppWidgetProvider,而我们要实现listview还需要另外两个类,RemoteViewsService、RemoteViewsFactory,准备好三个类之后才能进行下面详细的实施,至于这三者的作用我将会详细的介绍给大家。首先是这样一个界面,这是在widget里面的布局,可以看到的是这个widget布局里面 有两部分需要处理,一是图标“花”点击之后应该有个动作,第二是如何处理listview的数据。第一次写,希望多给些意见。

2022-09-19 16:58:08 19

转载 RemoteViews嵌入ListView复杂布局

然而一个单独的PendingIntents模板可以设置在集合里,参见setPendingIntentTemplate(int, PendingIntent),并且一个给定条目的单独的on-click的动作可以通过在条目上设置fillInIntent来区别。当在widgets中使用集合(比如说ListView, StackView等等)时,在单独的一个条目中设置PendingIntent代价是很昂贵的,因此也是不被允许的。在res/xml/下建立custom_widget.xml文件。

2022-09-19 16:49:05 13

转载 ViewFlipper(翻转视图)的基本使用

本节给大家带了的是ViewFlipper,它是Android自带的一个多页面管理控件,且可以自动播放!1.这里我们通过动态的方法添加View,这里只是简单的ImageView,可根据自己需求进行扩展!后来发现,模拟器上因为是鼠标的关系,并不会频繁的抖动,而真机上,因为手指一直是颤抖的 所以ACTION_MOVE会一直触发,然后View一直切换,后来考虑了。

2022-09-19 16:37:52 7

转载 ViewFlipper和AdapterViewFlipper使用的方法实例

到此这篇关于Android中ViewFlipper和AdapterViewFlipper使用的文章就介绍到这了。

2022-09-19 16:29:13 10

转载 ViewFlipper使用详解

ViewFlipper的介绍和使用ViewFlipper是Android自带的一个多页面管理控件,且可以自动播放!和ViewPager不同,ViewPager是一页页的,而ViewFlipper则是一层层的,和ViewPager一样,很多时候, 用来实现进入应用后的引导页,或者用于图片轮播。一、常用的属性和方法常用方法:setInAnimation:设置View或ImageView进入屏幕时使用的动画setOutAnimation:设置View或ImageView退出屏幕时使用的动画。

2022-09-19 16:19:14 11

转载 7.0新特性Shortcut

Shortcut概念Shortcut 是Android-25(Android 7.1)新增的一项类似iOS的 3D Touch 功能的快捷方式组件,但是有着不同的表现形式,因为Android在硬件上不支持触摸压力感应,所以表现形式为长按,而iOS须用力长按。首先,来个效果图在 Launcher 或 应用程序列表 里面,长按应用图标,弹出一个快捷方式列表, 并且,可以把单个快捷方式拖动出来作为一个桌面图标,拖出来的图标会随着清除应用数据或卸载应用而消失,须重新创建。具体实现。

2022-09-15 13:57:15 15

转载 ShortCuts

其中App Shortcuts是指在桌面长按app图标而出现的快捷方式, 可以为你的app的关键功能添加更快速的入口而不用先打开app,点击快捷方式可以访问应用功能, 并且这种快捷方式也可以被拖拽到桌面单独放置, 变成单独的桌面快捷方式.

2022-09-15 13:44:53 19

转载 Widget—小部件 学习(踩坑篇)

通过运行效果,我们可以看到点击加减法都是有效果的,证明广播是接受到了,但是TextView显示的数据有问题,当小组件创建时,显示为0,点击“+”也确实变成了1,但再点击却不会再有变化,一直显示1。所以我想到的解决方案就是在CalculateService中再创建一个广播接收者,这个广播接收者接收的广播由CalculateProvider的onReceive()中发送,也就是我先在onReceive中判断是点击了哪个按钮,然后再发出对应的广播。我一开始也是这么想的,那么接下来就来看一下我最开始是如何实现的。

2022-09-15 11:25:51 11

转载 Widget的使用和需要注意的问题

当widget刷新时,如果应用没有处于开启状态下,这时会创建APP进程并初始化Application,之后回调widget的onUpdate方法。然而这里会有一个问题,由于部分app为了性能优化,将部分初始化操作移动到了引导页或Main页面里了,这样当widget想使用某些功能时,由于只创建了Application,在引导页或main页面里进行初始化的那部分功能没有进行初始化,便会抛出各种异常。现在已经可以添加widget显示啦,显示的内容为widget_layout.xml里的布局,没错就是这么简单。

2022-09-15 11:05:33 14

转载 关于协程异常处理,你想知道的都在这里

而这就是协程的结构化并发特性。我们在 launch 时,因为启动了一个新的协程作用域,而新的作用域内部已经是新的线程(可以理解为),因为内部发生异常时因为没有被直接捕获 , 再加上其Job不是 SupervisorJob,所以异常将向上开始传递,因为其本身已经是根协程,此时根协程的 CoroutineContext 也没有携带 CoroutineExceptionHandler,从而导致了直接异常。每个任务都有自己的生命周期,子任务的生命周期会继承父任务的生命周期,比如如果父任务关闭,子任务也会被取消。

2022-09-14 13:32:30 17

转载 Gradle 进阶(一):深入了解 Tasks

Gradle自定义Task看起来非常简单,通过等API就可以轻松实现。但实际上为了写出高效的,可缓存的,不拖慢编译速度的task,还需要了解更多知识。定义Task查找Task配置Task将参数传递给Task构造函数Task添加依赖Task排序Task添加说明跳过Task支持增量编译Task如上所说,自定义Task一般可以通过实现doLast {}}}复制代码如果是kotlin或者kts中,也可以通过代理来实现doLast {}}}复制代码registertask。

2022-09-14 10:18:12 34

转载 再讲Fragment的懒加载-深度懒加载之布局的懒加载优化

可以看到我们所谓的 Fragment 懒加载,也只是逻辑的懒加载,处理的是 initData 加载数据的懒加载,如果 Fragment 内部的布局是列表RV这样的,问题不大,但是如果是复杂的长滚动布局,又或者是不同的复杂布局,那么就会卡顿。但是这样也只是优化了Activity的启动速度,当数据加载出来之后 inflate 布局,算是懒加载了,但是如果布局实在是复杂,依然会卡顿,之前的项目就是复杂布局加载耗时800毫秒,就会明显感知到一顿。Fragment为普通的带Loading封装的一个Fragment。

2022-09-09 11:19:04 25

转载 字体系列 (三):Xml中的字体

Google 在 Android Support Library 26 引入了 Xml 中设置字体这项新功能,它可以让你将字体当成资源去使用,你可以在 res/font/ 文件夹中添加 font 文件,将字体捆绑为资源。复制代码注意:要使用 Xml 字体功能,需引入 Android Support Library 26 及更高版本且要在 Android 4.1 及更高版本的设备回顾下本篇文章我们讲的一些重点内容:1、将字体放在 res 的 font 目录下,这样我们就可以在 Xml 中使用字体了。

2022-09-07 13:43:07 53

转载 字体系列 (二):Typeface完全解析

在本系列的上一篇文章中,我们介绍了关于 Android 字体的一些基础知识,还没有看过上一篇文章的朋友,建议先去阅读Android字体系列 (一):Android字体基础,你会发现,我们设置的那三个属性最终都会去构建一个 Typeface 对象,今天我们就好好的来讲讲它注意:本文所展示的系统源码都是基于Android-30 ,并提取核心部分进行分析Typeface 负责 Android 字体的加载以及对上层提供相关字体 API 的调用。

2022-09-07 13:33:38 76

转载 字体相关基础

最近接到一个需求,大致内容是:全局替换当前项目中的默认字体,并引入 UI 设计师提供的一些新字体。于是对字体做了些研究,把自己的一些心得分享给大家。注意:本文所展示的系统源码都是基于Android-30 ,并提取核心部分进行分析1、Android 系统默认使用的是一款叫做Roboto的字体,这也是 Google 推荐使用的一款字体传送门。它提供了多种字体形式的选择,例如:粗体,斜体等等。

2022-09-07 13:27:01 10

转载 用 proguardgui.bat 还原混淆代码

在我们开发 app 或者 sdk 的时候,为了安全起见,防止被别人反编译,所以我们都会对我们的代码进行混淆配置。但是混淆之后,利用一些工具,进行 bug 崩溃的采集的时候,那些代码我们看不懂,既然看不懂,还怎么解决bug?不过放心,Android SDK 自带的工具中,有个 proguardgui.bat 可以帮助我们还原代码,我们现在就要简单学习一下,这个工具怎么使用。

2022-09-05 17:47:58 28

转载 ProguardGui界面化工具使用

在点击Add input按钮,添加我们需要进行混淆的jar(no_proguard.jar)点击Add output按钮,填入我们要输出的jar包的名称。3、依次设置压缩(Shrinking)、混淆(Obfuscation)、优化(OPtimization)和Information按钮,设置混淆各种配置。1、准备未混淆过的jar,双击打开AndroidSDK安装目录\tools\proguard\bin\proguardgui.bat。2、设置我们需要混淆的jar包和混淆后输出的jar包。

2022-09-05 17:33:54 25

转载 代码混淆解决方案,适配AndroidX

在Studio中做混淆,基本就是对Proguard-rules.pro文件的操作。混淆的过程也是有规律可循的。下面我将分几个部分来分别介绍混淆过程。(1)如何开启混淆。(2)混淆的公共部分。(3)需要我们不混淆的代码。(4)libs下的第三方Jar包的混淆方式。(5)complie的第三方Jar包的混淆方式。(6)代码注释的混淆方式。

2022-09-05 11:17:55 74

转载 多模块混淆、多module混淆、多library混淆的正确姿势

博客中我们提到了混淆。混淆的文章其实网上也很多,介绍的都很好,但是关于多个module的混淆规则就不是这么详细,有的也是错误的,经过了2天的多次实践以及查阅资料(多次打包和反编译看源码,很费时间啊),终于达到了我的目的。一般来说,在组件化开发的情况下,app module的代码是很少的,依赖的第三方库也是很少的。网上很多关于子module的混淆配置是错误的,经过我的多次实践得出,主模块的混淆开关配置会直接影响到子模块,也就是说如果你的主模块开启的混淆,就算你的子模块关闭混淆开关,最终子模块还是会被混淆的。

2022-09-05 10:37:46 15

原创 Java判断float类型是不是整数

【代码】Java判断float类型是不是整数。

2022-09-01 17:36:15 109

转载 自定义一个随意拖拽可吸边的悬浮View

先定义一个FloatView类,继承自FrameLayout,实现构造方法。创建一个ShapeableImageView,并添加到这个FloatView中。}}}复制代码。

2022-08-31 10:35:22 39

二维码扫描ZxingDemo

一个二维码扫描例子

2016-04-06

Android内核剖析 柯元旦

一部介绍安卓内核的书籍,介绍了android framework的相关开发知识

2015-01-31

HEAD_FIRST设计模式(中文版)

HEAD_FIRST设计模式(中文版)非常经典的java开发书籍,可以提升开发能力,使项目具有弹性

2015-01-31

ormlite-4.48

Android中用ormlite实现持sqlite持久化 共含三个jar包 ormlite-android-4.48.jar ormlite-core-4.48.jar ormlite-jdbc-4.48.jar

2014-11-29

jdk-6u45-linux-x64.part2

如标题示,此为linux下64位java 1.6jdk,经验可以安装运行:我的linux为64 位ubuntu: uname -a Linux kevin-virtual-machine 3.5.0-17-generic #28-Ubuntu SMP Tue Oct 9 19:31:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

2013-07-31

jdk-6u45-linux-x64.part1

如标题示,此为linux下64位java 1.6jdk,经验可以安装运行:我的linux为64 位ubuntu: uname -a Linux kevin-virtual-machine 3.5.0-17-generic #28-Ubuntu SMP Tue Oct 9 19:31:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

2013-07-31

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除