自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 在安卓中无法通过在for循环中setText()实现TextView的动态变化

有不少安卓开发的新手会想当然地以为在一个for循环中就可以实现TextView的动态变化。例如,下面就是错误的示例:错误的原因在于textView.setText()完成后线程并没有停下来,安卓必须在线程停下来后才会显示画面。所以正确的做法是新开启一条线程去动态更新TextView,下面是正确的代码:开启新的线程后还要在textView.setText()后面让线程暂停一会儿,只有线程暂停了安卓才能显示画面,在这里最好用handler来更新ui。...

2021-08-11 21:50:52 876

原创 关于安卓LiveData的一点可能造成内存泄露的细节问题

LiveData最重要的一个特性是具有生命周期感知能力,当Activity或者Fragment处于活跃状态时,观察者才能观察到LiveData的变化。如果这一点没理解好就容易犯难以察觉的错误。无论是LiveData还是观察者都要绑定一个生命周期拥有者,简单来说就是你的LiveData或者观察者要绑定一个Avtivity或者Fragment 。注意一点,当你的观察者是在Fragment时,千万不要让你的观察者绑定Activity,不然可能会造成内存泄露,要把你的观察者绑定在Fragment的生命周期上。

2021-08-08 11:26:27 581 2

原创 安卓的LiveData存在的坑

LiveData是一种观察者模式,当LiveData中的数据发生变化时会立刻通知所有的观察者,然后执行观察者中的代码。正因为有这个机制所以会造成一些难以察觉的错误,例如,当我们需要A和B两个条件时才能计算C时,如果A是通过LiveData传递的,B是其它方式传递的,计算C的代码放在LiveData的观察者上,如果这个时候我们先传递A,那么会立刻触发LiveData中观察者的计算C的代码,但是这个时候B还没有传递过去,所以这样会造成计算错误。...

2021-07-16 10:28:55 583

原创 安卓的ContentResolver简介

ContentResolver是安卓中访问媒体的工具类,通过ContentResolver resolver = context.getContentResolver();可以获取这个类的对象,context是上下文对象,一般来说context就是activity。ContentResolver的使用像数据库的使用,有增删改查四个常用操作。比如下面这段代码就可以删除手机上一张照片:ContentResolver resolver = context.getContentResolver();

2021-06-27 18:37:29 1602

原创 JAVA中的随机存储流

//随机存储流,可以更改文件字节流的内容RandomAccessFile randomAccessFile = new RandomAccessFile(encryptFile,"rw"); //从0开始改 randomAccessFile.seek(0); //要更改的数据 randomAccessFile.write(decipherByte,0,decipherByte.length); //整个文件的长度,即这个文件有多少个字节

2021-06-01 10:44:40 111

原创 安卓的ROOM迁移到新数据库

这个还是比较简单,只要添加一个迁移规则就行。例如如下迁移规则,这个迁移规则是新的数据库创建一张新的表。 /** * 数据库版本迁移:1到2 */ static final Migration MIGRATION_1_2 = new Migration(1,2) { @Override public void migrate(@NonNull SupportSQLiteDatabase database) { data

2021-05-17 19:02:47 112

原创 在Linux环境中通过共享内存方式进行进程间通信

#include<stdio.h>#include<unistd.h>#include<sys/types.h>#include<signal.h>#include<sys/ipc.h>#include<sys/msg.h>#include<sys/shm.h> char *addr; //客户端发送消息 void client(){ //申请共享内存,shmget函数的具体意思自行百度 int s

2021-05-16 22:22:09 77

原创 在Linux环境中利用消息队列进行进程间的通信

#include<stdio.h>#include<unistd.h>#include<sys/types.h>#include<signal.h>#include<sys/ipc.h>#include<sys/msg.h> //用于装载消息的结构体 struct msgbuf{ long mtype;//消息类型 char mtext[1];//消息正文 }; //定义一个结构体 struct msg

2021-05-16 20:57:26 103

原创 ERROR 1698 (28000): Access denied for user ‘root‘@‘localhost‘

解决办法请点这里

2021-05-15 21:37:06 77

原创 消除安卓button自带的阴影

android:stateListAnimator="@null"在button中加入此属性就可以消除自带阴影。

2021-05-15 19:06:52 334

原创 Activity过渡工具类

public class AnimationTransitionUtils { public static void setAnimationTransition(Window window){ window.requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS); android.transition.Fade fade = new android.transition.Fade(); fa

2021-05-15 19:03:58 96

原创 安卓通过MediaStore访问媒体文件的简易步骤

第一步:获取权限要想访问手机上的媒体文件,那就需要下面这个权限,但仅仅在Manifest上声明是不够的,需要用户授权才行。<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />下面这段代码是一段简易的向用户申请权限的代码,你可以根据需要去扩展它,除了这段代码你还需要在Manifest上声明你需要的权限。 //权限申请 if (checkSelfPermission(Mani

2021-05-05 16:16:10 1397 4

原创 在ubuntu上安装和使用mysql

在ubuntu上使用要比windows上方便的多,只需两步就行了。第一步:在终端上输入:sudo apt install mysql-server回车即可安装mysql第二步:在终端上输入:sudo mysql -u root -p 按两次回车即可登入mysql,最开始的root用户是没有密码的。...

2021-04-14 16:13:44 269

原创 如何为安卓程序设置启动页面(splash)?

目前有两种主流的方法去设置这个splash,第一种方法是用activity的布局去做这个splash,第二种方法是用一张图片来做这个splash,第一种方法会出现短暂黑屏或白屏的情况,所以在这里介绍第二种方法。步骤一:制作9patch图片因为安卓手机有很多种尺寸,如果使用普通图片就会产生变形,9patch图片就能很好地解决这个问题。如果你还不会制作9patch图片,那你先去学会9patch图片的制作方法再来看这篇文章吧。步骤二:放9patch图片这一步既是细节也是重点,你需要把你的9patch图片放

2021-04-04 16:59:01 616

原创 cpu能同时运行多个进程和多个线程吗?

这个得分情况讨论,如果是以前单核时代的CPU,那只能同时运行一个进程或者一个线程,因为这个时代的CPU只有一个MMU。后来出现了多核CPU,假如现在有一个双核CPU,那这个CPU就能同时运行两个线程,但仍然只能同时运行一个进程,因为这个双核CPU仍然只有一个MMU。再后来,CPU厂商为每个CPU核心配置了MMU,这个时候的CPU就能同时运行多个进程和多个线程。后来又出现了超线程技术,比如inter的i3-5005u就是一个双核四线程的CPU,这个CPU就能同时运行四个进程,或者同时运行四个线程。.

2021-03-25 20:03:43 6621

原创 如何用Java原生API做一次http带参数的POST请求?

http带参数的POST请求有三部分代码,分别是请求行、请求头和请求体;请求行 //你需要换成你自己的网址 String urlStr = "http://www.xxx.com"; URL url = new URL(urlStr); URLConnection urlConnection = url.openConnection(); HttpURLConnection httpURLConnection = (HttpURLConnection

2021-03-21 19:20:41 340

原创 解决浏览器打开网页极慢的问题

这个可能是DNS导致的,像如下图所示配置DNS可能可以解决

2021-03-17 16:19:30 218

原创 Android项目中res文件夹的作用

做过Android项目的人都会发现项目中有一个res文件夹,在这个文件夹下有drawable文件夹、layout文件夹、mipmap文件夹、values文件夹和menu文件夹。drawable文件夹:在这里会放除了app图标外的所有图片资源,还包括xml类型的图片资源。layout文件夹:在这里放的是布局资源文件。mipmap文件夹:在这里放的是app的应用图片资源。values文件夹:这里放的是像字符串、颜色、数组、主题样式等等这样的资源文件,这里的xml文件一般都是以<resources&

2021-03-11 18:56:39 2889

原创 安卓DataBinding出现ActivityMainBinding类不存在

欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全新的写作体验;在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;增加了 图片

2021-03-10 16:11:49 3876 1

空空如也

空空如也

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

TA关注的人

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