android
梦想不只是梦与想
这个作者很懒,什么都没留下…
展开
-
Java对象大小计算
结合第一章《理论篇》的知识,猜想一下,在64位虚拟机下,Java对象的大小。这是在代码中打印对象大小的方法。在 Maven 项目的。学习和掌握该知识,有助于分析。“应用系统的堆到底该设置为多大?3.1 指针压缩的 JVM 参数。3.2 借助 jol-core。本文计算的是Java对象在。2.1 Object对象大小。2.2 包含实例数据的对象。对齐填充(数组对象才有的)打印对象大小的 API 是。转载 2023-03-02 21:42:43 · 1041 阅读 · 0 评论 -
小米手机toast显示不全
排查了好久,最后是因为换行转义字符的锅,把\n换为\r\n,完美显示。原创 2022-07-27 10:12:05 · 1635 阅读 · 0 评论 -
Annotation Processor
当我们依赖一些第三方的库时,可能会遇到com.android.support冲突的问题,就是因为开发者使用的compile或api依赖的com.android.support包与我们本地所依赖的com.android.support包版本不一样。RetentionPolicy.SOURCE表示修饰的注解只在源码中保留,编译后就被遗弃了,也就是class文件中就不存在了。该依赖方式会传递所依赖的库,当其他module依赖了该module时,可以使用该module下使用api依赖的库。...原创 2022-07-25 16:17:11 · 4060 阅读 · 0 评论 -
手机屏幕共享工具
投屏 投屏软件 工具原创 2022-07-07 11:41:34 · 716 阅读 · 0 评论 -
ImageView比例缩放
备注: adjustViewBounds只有在ImageView一边固定,一边为wrap_content的时候,设置为true,可以让ImageView的比例和原始图片一样的效果。原创 2022-06-11 15:01:43 · 559 阅读 · 0 评论 -
Debug.startMethodTracing,trace文件找不到
是因为生成文件的路径不是sd卡的根目录,网上的代码大部分还是不靠谱的。生成的文件在sd卡:Android/data/packagename/files/xxx.trace参考文章:启动优化工作选择 - 白一粥 - 博客园...原创 2021-12-02 11:45:09 · 640 阅读 · 0 评论 -
音频开发_如何获取单词的音频mp3文件
1.gstatic oxfordhttps://ssl.gstatic.com/dictionary/static/sounds/oxford/no--_gb_1.mp3https://ssl.gstatic.com/dictionary/static/sounds/oxford/yes--_gb_1.mp32.有道词典http://dict.youdao.com/dictvoice?type=1&audio=sheilahttp://dict.youdao.com/dictvoic转载 2021-11-16 00:13:15 · 988 阅读 · 0 评论 -
流式布局FlowLayout使用
原先用的是三方的流式布局,后来发现google自己也有,效果是一样的。<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" an原创 2021-10-19 13:37:04 · 1473 阅读 · 1 评论 -
Notification
最近时不时地有人问我这样或那样的通知如何实现,所以本文将根据个人经验对Notification做个总结,以供参考!什么是通知(Notification)通知是一个可以在应用程序正常的用户界面之外显示给用户的消息。通知发出时,它首先出现在状态栏的通知区域中,用户打开通知抽屉可查看通知详情。通知区域和通知抽屉都是用户可以随时查看的系统控制区域。作为安卓用户界面的重要组成部分,通知有自己的设计指南。在Android 5.0(API level 21)中引入的 Material Design 的变化是转载 2021-10-19 11:52:32 · 637 阅读 · 0 评论 -
BottomNavigationView底部图标和文字的显示问题
一、BottomNavigationView3个以上图标不显示文字当图标大于3个时,显示图标和当前页的文字。调用BottomNavigationView的setLabelVisibilityMode方法可以解决布局设置:<com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/bnv_main" app:menu="@menu/bottom_nav原创 2021-10-17 11:34:52 · 2842 阅读 · 2 评论 -
资源id与资源名称互相转换
Android 资源名称(name)和id互相转换,动态获取一、通过传递图片名称,获取对应的图片idpublic int getId(String name){ Resources res=getResources(); //return res.getIdentifier(name,null,null);//带上地址 例如 包:type/name (org.anjoy.act:drawable/ic) return re转载 2021-09-12 12:08:54 · 426 阅读 · 0 评论 -
非静态内部类不能定义静态成员变量和静态方法
非静态内部类不能有静态成员!成员内部类必须先实例化外部类对象然后再实例化成员内部类;非static的内部类,在外部类加载的时候,并不会加载它,所以它里面不能有静态变量或者静态方法。1、static类型的属性和方法,在类加载的时候就会存在于内存中。2、要使用某个类的static属性或者方法,那么这个类必须要加载到jvm中。基于以上两点,可以看出,如果一个非static的内部类如果具有static的属性或者方法,那么就会出现一种情况:内部类未加载,但是却试图在内存中创建static的属性和方..转载 2021-09-04 10:08:52 · 920 阅读 · 0 评论 -
Handler之同步屏障机制(sync barrier)
分析中,发现不错的文章分析,暂时做个记录:https://www.cnblogs.com/wytiger/p/13031145.html原创 2021-06-09 10:13:51 · 193 阅读 · 1 评论 -
布局动画 LayoutTransition
在API 11后,添加了两个能实现在创建后添加控件仍能应用动画的方法,分别是android:animateLayoutChanges属性和LayoutTransition类。他们的API 等级必须>=11。使用方法:ViewGroup使用LayoutTransition即可为布局变化应用动画效果。ViewGroup#setLayoutTransition(LayoutTransition) android:animateLayoutChanges="true"通过...原创 2021-05-19 18:39:07 · 461 阅读 · 7 评论 -
SeekBar高度设置、自定义样式
最近在自定义SeekBar的滑块、拖动条时,发现底部的背景和滑块一样高,鼓捣了半天也没有效果,主要还是SeekBar的高度、滑块高度、拖动条高度定义未搞清楚,现在做个记录以便以后参考:1、滑块高度:可以在自定义Drawable文件中,通过<size android:height="10dp" android:width="10dp" />设置<selector xmlns:android="http://schemas.android.com/apk/r...原创 2021-05-14 15:14:06 · 2961 阅读 · 7 评论 -
Broadcast广播的分类
BroadcastReceiver(广播接收器),属于Android四大组件之一。在分析ANR产生原因时,涉及到部分广播的知识,我将针对广播类型,做个记录:1. 普通广播(Normal Broadcast)即开发者自身定义intent的广播(最常用),也就是并行广播。发送广播使用如下:Intent intent = new Intent();//对应BroadcastReceiver中intentFilter的actionintent.setAction(BROADCAST_AC...原创 2021-04-30 14:42:04 · 2517 阅读 · 2 评论 -
Android ANR 原理分析
ANR 简介ANR:Application Not Responding,即“应用程序无响应”。Android 运行时,AMS 和 WMS 会监测应用程序的响应时间,如果应用程序主线程(即UI线程)在超时时间内对输入事件没有处理完毕,或者对特定操作没有执行完毕,就会上报 ANR。ANR 的触发分为以下几类, InputDispatching Timeout:输入事件(包括按键和触屏事件)在5秒内无响应,就会弹出 ANR 提示框,供用户选择继续等待程序响应或者关闭这个应用程序(也就是杀掉这个应用转载 2021-04-30 11:51:45 · 1852 阅读 · 1 评论 -
android 跳转到当前应用的详情、设置页面
分析三方权限申请源码时,发现不错的逻辑,做个记录: Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) .setData(Uri.fromParts("package", getPackageName(), null)); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);...原创 2021-04-28 11:03:20 · 2618 阅读 · 4 评论 -
自定义控件-时间轴
由于项目中有需求,就简单的封装一个,先记录一下,有时间上传到github。1、先增加自定义属性:<?xml version="1.0" encoding="utf-8"?><resources> <declare-styleable name="global_TimelineLayout"> <!--时间轴左偏移值--> <attr name="global_line_margin_left" for原创 2021-04-25 09:41:55 · 641 阅读 · 4 评论 -
android存储路径详解
前言前两天因为开发一个app更新的功能,我将从服务器下载的apk文件放在了内部存储目录(测试手机为小米,路径为:data/user/0/packagename/files)下面,然后安装的时候一直安装不了,提示解析包出错。后来查询发现,安装apk是调用了PackageInstaller,没有相关权限,这个无法获取内部路径,所以会安装不了。借机也复习了一遍Android下面存储相关的知识点,特来总结一番。存储分类对于Android存储目录,我总结成一张思维导图,如果有需要原图的,请在..转载 2021-04-20 17:53:38 · 13357 阅读 · 2 评论 -
toast能在子线程中弹出吗
Android人知道在安卓中不能在子线程中更新ui,为什么呢?真的不能吗?先做个试验,我们在子线程中调用toast,看看有什么效果,按照上边一句话的意思,这里应该会报错显示不能再子线程中刷新ui吧val thread = object : Thread() { override fun run() { Toast.makeText(this@MainActivity, "123", Toast.LENGTH_LONG).show() }}thread.start转载 2021-04-18 23:14:54 · 472 阅读 · 2 评论 -
获取顶部状态栏高度
//获取顶部status bar 高度private int getStatusBarHeight() { Resources resources = mActivity.getResources(); int resourceId = resources.getIdentifier("status_bar_height", "dimen","android"); int height = resources.getDimensionPixelSize(resourceId);.原创 2021-03-18 10:16:21 · 625 阅读 · 0 评论 -
maven设置每次构建获取最新jar包版本号
一般开发过程中,版本都是SNAPSHOT版本的。在跨工程引用的时候,获取最新版本的jar。经常就是不断的更新版本,通过版本变更来获取最新版本的jar。其实是可以声明变化版本,让gradle每次编译都去获取最新时间戳版本的jar(目前只可以解决相同分支jar问题,如果是多分支合作,代码获取会存在问题)。build.gradle中的依赖是通过设置maven依赖实现。我们知道,maven可以说是通过一个坐标定位来确定唯一一个包的,所说的坐标定位分别是groupId,artifactId和versi...原创 2021-03-17 11:55:08 · 3002 阅读 · 0 评论 -
hashcode方法的重写
重写hashCode()方法的基本规则a、注意事项1、同一个对象多次调用hashCode()方法应该返回相同的值2、两个对象通过equals()方法比较返回true时,这两个对象的hashCode()方法应返回相等的值3、对象中用作equals()方法比较标准的Field,都应该用来计算hashCode值b、计算步骤 1、各数据类型field的计算方式Field类型 计算方式 boolean hashCode = (f?0:1); 整数类型(byte、sho..原创 2021-01-10 21:54:24 · 1956 阅读 · 0 评论 -
drawable 资源目录加载顺序
1、同一张图片放在不同文件夹下有什么不同?Android默认的资源检索顺序?比如真机分辨率是xxhdpi,那么如果将图片放在xhdpi下图片会被放大,而将图片放在xxxhdpi中图片会被缩小。drawable-xxhdpi文件夹下有这张图就会优先被使用,在这种情况下,图片是不会被缩放的。但是,如果drawable-xxhdpi文件夹下没有这张图时, 系统就会自动去其它文件夹下找这张图了,优先会去更高密度的文件夹下找这张图片,我们当前的场景就是drawable-xxxhdpi文件夹,然后发现这里也没有转载 2020-12-24 19:02:08 · 573 阅读 · 1 评论 -
Scrollview嵌套webview空白
最近在做一些页面详情页的时候,因为需要用到ScrollView嵌套webview进行部分网页的显示。因为之前用的是6.0的android版本测试的,所有没有发现问题。后来在android9.0的版本测试的时候,才发现会出现,webview的页面显示为空白或者高度为0这两种情况。网上查了好多解决方案,基本都不能用,虽然有一个在onPageFinished里面重新设置webview的高度,但是这种限死高度的事情肯定是会有问题的,所有基本也可以放弃这个方案。最后通过测试webview的加载过程,在初始化的转载 2020-11-13 10:51:08 · 375 阅读 · 0 评论 -
AbstractProcessor使用小结
1、没有注册信息,也就没有目标类生成使用 google auto-service添加依赖,一定别忘了加 annotationProcessor,auto-service 的原理是找到被@AutoService标记的自己写的Processor,然后生成注册信息,如果没依赖 annotationProcessor 就没有注册信息,也就没有目标类生成build.gradledependencies { implementation 'com.google.auto.service:au原创 2020-11-11 18:01:33 · 3290 阅读 · 0 评论 -
加速maven构建
maven仓库用过的人都知道,国内有多么的悲催。还好有比较好用的镜像可以使用,尽快记录下来。速度提升100倍。<url>http://maven.aliyun.com/nexus/content/groups/public</url>android工程配置如下:...原创 2020-11-04 21:56:28 · 159 阅读 · 0 评论 -
DrawerLayout常用方法
1、当DrawerLayout滑动出来的时候,默认是会给侧边栏下面部分的界面蒙上一层阴影,如果需要去除阴影:drawer.setScrimColor(Color.TRANSPARENT);//也可以设置为想要的颜色2、DrawerLayout的侧边滑动可以通过设置锁定模式来禁用:drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);备注:这样设置侧边栏弹出之后无法使用滑动来关闭,只能通过点击空白区域来关闭侧边栏,可以..原创 2020-10-30 18:05:10 · 770 阅读 · 0 评论 -
Jetpack 之 LifeCycle 组件使用详解
一、LifeCycle 简介LifeCycle 是一个可以感知宿主生命周期变化的组件。常见的宿主包括 Activity/Fragment、Service 和 Application。LifeCycle 会持有宿主的生命周期状态的信息,当宿主生命周期发生变化时,会通知监听宿主的观察者。LifeCycle 的出现主要是为了解决: 系统组件的生命周期与普通组件之间的耦合性。系统组件指:Activity/Fragment、Service 和 Application。 普通组件指:将代码按照功能或者作用转载 2020-09-27 13:57:59 · 106 阅读 · 0 评论 -
ItemTouchHelper基本用法
ItemTouchHelper是谷歌提供的用于实现Recyclerview 拖拽效果的帮助类,今天我们来学习下它的基本用法首先ItemTouchHelper需要实现它的一个内部抽象类CallBackpublic class ItemTouchHelperCallback extends ItemTouchHelper.Callback { private IMoveAndSwipeCallback iMoveAndSwipeCallback; public...转载 2020-09-21 16:51:45 · 3297 阅读 · 0 评论 -
Android 布局文件(view)生成Bitmap
已测量过的View生成Bitmap 即经过测量、布局、绘制并显示在界面上的View,此类View无需再次进行测量和布局,可直接将内容绘制到指定的Bitmap上。/** * 绘制已经测量过的View */private static Bitmap drawMeasureView(View view) { int width = view.getWidth(); int height = view.getHeight(); Bitmap bitmap = ...原创 2020-08-17 17:26:02 · 2258 阅读 · 3 评论 -
正确理解ThreadLocal
ThreadLocal是在Thread类之外实现的一个功能(java.lang.ThreadLocal), 但它会为每个线程分别存储一份唯一的数据。正如它的名字所说的,它为线程提供了本地存储,也就是说你所创建出来变量对每个线程实例来说都是唯一的。和线程 名,线程优先级类似,你可以自定义出一些属性,就好像它们是存储在Thread线程内部一样,是不是觉得酷?不过先别高兴得太早了,有几句丑话得先说在前 头。创建ThreadLocal有两种推荐方式:要么是静态变量,要么是单例实例中的属性,这样可以是非静态的。注意转载 2020-08-03 23:22:48 · 138 阅读 · 0 评论 -
CPU个数、CPU核心数、CPU线程数
CPU个数、CPU核心数、CPU线程数 我们在选购电脑的时候,CPU是一个需要考虑到核心因素,因为它决定了电脑的性能等级。CPU从早期的单核,发展到现在的双核,多核。CPU除了核心数之外,还有线程数之说,下面文本就来解释一下CPU的核心数与线程数的关系和区别。CPU个数即CPU芯片个数CPU的核心数是指物理上,也就是硬件上存在着几个核心。比如,双核就是包括2个相对独立的CPU核心单元组,四核就包含4个相对独立的CPU核心单元组。线程数是一种逻辑的概念,简单地说,就是模拟出的CPU核..转载 2020-07-15 22:39:30 · 909 阅读 · 0 评论 -
字符串转换成对应资源id
比如说:字符串”R.mipmap.a“,项目中需要把它转换对应的int类型资源id,可以这么用:context.getResources().getIdentifier("a","mipmap",context.getPackageName());其实就是一个拼接的过程。原创 2020-05-31 19:15:28 · 572 阅读 · 1 评论 -
Android MediaPlayer 播放音频文件
1.把本地音频文件放入res/raw文件夹2.播放代码try { mPlayer = new MediaPlayer(); AssetFileDescriptor file = mContext.getResources().openRawResourceFd(R.raw.chat_bell); try { mPlayer.setDataSource(file.g原创 2020-05-30 17:41:37 · 498 阅读 · 0 评论 -
Android原生方式获取经纬度
Android原生方式获取经纬度优惠码优惠2019-07-10 15:12:06浏览1824android 函数 string void networkAndroid原生方式获取经纬度两种定位方式:GPS定位、WiFi定位优劣:如果项目定位要求较高还是建议使用三方地图库GPS定位相比Wifi定位更精准且可在无网络情况下使用,但在室内基本暴毙无法使用WiFi定位没有室内外限制也不需要开启GPS但需要联网,另外测试发现WiFi定位时onLocati...转载 2020-05-12 08:57:07 · 560 阅读 · 0 评论 -
ScrollView嵌套WebView填坑
最近项目中有页面用到ScrollView嵌套WebView,代码如下:<android.support.v4.widget.SwipeRefreshLayout android:id="@+id/swiper" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> <...原创 2020-05-09 14:52:12 · 990 阅读 · 0 评论 -
setClickable 和 setEnable 事件分发影响
1、setEnable:findViewById(R.id.iv).setEnabled(false),view的单击事件无法响应(onclick方法)因为可以看到setEnable(false) 将View的flag打上了DISABLED,如下: @RemotableViewMethod public void setEnabled(boolean enabled) {...原创 2020-03-19 11:26:21 · 426 阅读 · 0 评论 -
判断view是否可见
判断一个view是否可见,我们平常用以下代码比较多if(webView.getVisibility() == View.VISIBLE){ //可见 }else{ //不可见 }但是有时候布局会嵌套,如: <LinearLayout android:id="@+id...原创 2020-03-16 15:06:39 · 1940 阅读 · 0 评论