7 命运之手

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 7k+

【Android】【UI】如何判断控件完全加载完毕

原理控件的加载流程如下:解析布局 - 绑定窗口 - 测量自身大小 - 计算子控件布局 - 绘制所以,在onMeasure结束,或onLayout开始的时候,View自身就已经完全解析完成了此时就可以正确获取控件大小了,很多控件,只有在知道自身大小之后,UI方法才能正确执行测试代码 public class TTView extends View { public TTView(Context context) { super(context); }

2020-10-27 18:54:43

【Android】【UI】创建View时的Context该用Application还是Activity

安卓的View在创建时要指定Context,只要是Context,不管Application或者是Activity都可以,但是二者是有细微区别的 Activity包含了工程中设置的Theme,而Application是不包含Theme属性的,使用Application创建View会丢失Theme样式 布局中的控件,安卓系统默认会使用Activity作为Context 通过new View(Context context)或LayoutInfalter.from(Context context)创建的

2020-10-19 15:40:05

【Android音视频开发】【010】编译FFmpeg库时引入x264

FFmpeg本身并不包含x264组件,需要我们自己单独下载,然后在编译时包含进去由于在上一篇博客中已经讲解过Linux编译的知识,这一篇就长话短说,命令行执行方法不再细讲了没看过的请参考:【Android音视频开发】【009】编译安卓版本的FFMPEG库下载x264库下载x264库,解压到【Home/x264】位置 VideoLan/x264编译x264库x264库要编译出两份库文件,一份是静态库(.a文件),一份是动态库(.so文件)动态库是供安卓使用的,静态库是供FFmpeg编译时引用的

2020-10-17 14:57:10

【编程相关】Windows10中文用户名改英文

实测可行,比较简单,也不影响旧数据,没有网上说的那么麻烦,步骤如下 以管理员模式启动命令行,输入【net user administrator /active:yes】,开启管理员账号 注销,切换至管理员账号登录 【Win+R】,输入【regedit】,进入注册表编辑器 找到【HKEY_LOCAL_MACHINE - SOFTWARE - Microsoft - Windows NT - CurrentVersion - Profilelist】 下面会有很多代号为【S-1-5

2020-10-17 12:01:05

【Android音视频开发】【009】编译安卓版本的FFMPEG库

什么是FFMPEGFFMPEG是一套专业的音视频处理工具,它包含了多个组件,可以被编译为供不同平台和操作系统使用的动态库完整的FFMPEG库体积特别大,而且还可能配合其它库来使用,因此我们必须学会自己根据功能和平台,来编译不同的FFMPEG库编译FFMPEG存在的坑 不同版本的FFMPEG库,功能和组件不一样,脚本选项不一样 不同版本的NDK,工具链不一样,可用指令不一样 FFMPEG库会调用Linux系统的指令,不同版本的Linux系统,内嵌的工具链不一样,可用质量不一样 Linux系统和

2020-10-15 18:37:39

【Android】【TaskStack】任务栈与Activity启动模式全解析

说到Activity启动模式,相信大家肯定都不模式,多少会有所接触大多人应该都知道SingleInstance模式可以保证Activity单例,对其它模式的功能和具体使用场景应该都不是很清楚LaunchMode的背后,其实本质上是TaskStack管理,和Activity切换管理这里就给大家完整地讲解下关于任务栈的全部知识和原理,以及应用场景什么是任务栈顾名思义,任务栈就是通过一个栈的数据结构来管理一系列任务,实际上,这里的任务指的就是Activity,任务栈就是管理Activity切换的任务栈

2020-09-06 15:24:34

【Android】【应用保活】保证应用在后台继续运行

网上关于保证Service在后台持续运行的方法有很多,但有些其实作用并不大,仅适合原生系统实际Service的运行,不完全是由代码控制的,很大程度上取决于操作系统的进程管理策略,和手机型号和性能息息相关这里根据我的经验总结出的一些可行的方案,在中高端机型上,基本都能保证Service在后台运行在系统设置-启动管理里面,允许应用后台运行,运行应用自启动...

2020-09-01 18:40:16

【Android】【BroadcastReceiver】安卓8.0后广播接收器使用方法

安卓8.0后,对静态广播进行了限制,必须指定包名和类名,才能发送广播给其它应用新安卓系统广播特性 动态注册的接收器,必须在应用启动后通过代码注册,才能接收到广播。只要Action匹配,不管应用内还是应用外的广播都能收到 静态注册的接收器,除了Action匹配,还要PackageName和ClassName匹配,才能收到广播。也就是说,静态接收器收到的都是定点广播,而不是群发广播,在发送时就要通过PackageName和ClassName指定发给哪个接收器 通过静态注册广播接收器,监听操作系统或其它

2020-09-01 15:25:06

【Java】【正则表达式】IntelliJ Idea通过正则表达式清除注释代码

效果图清除多行注释^(/*)([\s\S]*?)(*/)$ ()没有特别含义,仅为了方便将表达式分割为多个部分来阅读 ^和$分别表示开头和结束 \表示转义,有些字符在正则表达式中具有特殊的含义,如果想使用其本来的含义,则需要进行转义 \s表示所有空白字符,\S表示所有非空白字符,[]在未转义的情况下表示或的关系,加起来就表示任意字符 *在未转义的情况下,表示任意多个字符 ?在未转义的情况下,表示最小匹配,不使用则表示最大匹配 一个字符串,可能它整体和某个片段,都符合表达式规则,这时

2020-08-19 11:47:39

【Android】【全屏切换】优雅地实现播放器全屏切换

传统方法 调整布局,隐藏多余的控件,让后将播放器设置为全屏大小 新开一个Activity或PopupWindow来显示全屏播放器传统方法的弊端 布局复杂,播放器可能嵌套在Fragment或TabLayout等元素里面,难以调整为全屏 布局调整代码常常极为繁琐,难以编写和阅读 新开Activity或PopupWindow,实际是两个播放器对象,所有初始化工作要重新开始,并且需要一段时间来加载视频,本身Activity属于重量级组件,编写的代码比较多,而且流畅度也相对较差优雅的解决方案

2020-08-18 11:29:07

【程序人生】2020下半年个人版本升级计划

2020转眼已经过去了一半,突然想起来一个有意思的想法,能否像做项目一样,给成长中的自己也定个版本号V0.0版本刚毕业的前三年,本科计算机毕业,却没有到大城市去找正经的专业工作,在老家厂里混日子是一个很坑爹的版本,现在想起来,都觉得当时是不是脑子给驴踢了,不知道当时是怎么想的我本身一个比较勤奋的人,上大学就经常9点去图书馆,学到晚上11点才睡觉。但是这样一个人,毕业时却没有选择一个像样的工作,自己都觉得不可思议虽然这样,但是还是想记录下来,人很多时候真的是这样的,当局者迷。在读书上一直很努力,尽量

2020-07-13 11:38:54

【Android】【系统组件】调用任意操作系统界面组件

需求有时我们需要调用系统设置界面来设置WIFI,设置功能权限,设置后台运行等功能但并不是每个机型,每个设置界面的类名我们都知道,这时我们就需要想办法获取这些界面的类名原理通过ADB指令,可以获取手机当前运行界面的包名和类名利用这个原理,我们进入到对应的操作系统设置界面后,就可以通过ADB指令获取对应界面的类名执行ADB指令确保ADB程序所在目录已经被加入到Path系统变量里面手机打开对应的设置界面,然后在AndroidStudio的Terminal面板中执行以下指令adb shell d

2020-06-23 11:14:11

【Java】【注解】获取字段上的注解为空

注解只有声明了RetentionPolicy.RUNTIME,才可以在运行时通过Field.getDeclaredAnnotations()等方法获取到,否则只相当于一个普通的标记,注释而已 @Retention(RetentionPolicy.RUNTIME) @Target(FIELD) public @interface Layout { UiLayout value() default UiLayout.Flow; }...

2020-06-10 16:30:00

【Java】Java代码自动化的三个阶段

代码封装,模块封装 注解处理器,通过编写注解处理器,扫描代码中的注解,自动根据注解完成任务 IDE插件,编写IDE插件与注解配合工作,在编译期间改变源码

2020-06-04 15:11:37

【Android】安卓环境变量配置

这篇博客没啥技术含量,主要是记录下一些小细节,防止新手走弯路,有时很久不碰自己也会忘了变量值功能JAVA_HOMED:\dev\jdkJDK位置ANDROID_HOMED:\dev\sdkAndroidSDK位置PathD:\dev\sdk\platform-toolsADB位置PathD:\dev\sdk\ndk\21.0.6113669NDK位置ANDROID_SDK_HOMED:\dev\android_avd模拟器虚拟设备存放位置

2020-05-20 23:11:18

【NDK】【009】通过CMake编译Native代码

前面我们已经介绍过,通过Gradle/命令行来编译Native代码,通过JNI/JNA来调用Native代码这里我们再介绍一种比较新的方法,Gradle+CMake编译Native代码,很适合从C语言转过来的开发人员

2020-05-20 00:37:23

【Java】在设计Callback功能时,如何巧妙回避Java的强制异常处理机制

有这样一句话:衡量Java设计师水平和开发团队纪律性的一个好方法,就是读读他们应用程序里的异常处理代码什么是Java的强制异常处理强制异常处理案例巧妙回避Java的强制异常处理机制以上设计方法和UncaughtExceptionHandler的区别总结

2020-05-19 16:48:27

【Java】java.lang.reflect.Type详解

Type简介获取Class的接口实现和类继承信息数组的Class与Type获取Field的字段类型ParameterizedTypeGson泛型解析原理模拟Gson的TypeToken类存储泛型信息TypeToken写法优化

2020-05-17 15:26:54

【Android】【NDK】目标文件,静态库,动态库

目标文件目标文件是由源代码编译而成的二进制文件源代码是供开发者阅读的文本文件,它的体积大,而且本质上都是文本,无法直接被机器使用,所以需要先编译为目标文件一个源代码文件,经过编译就会对应生成一个目标文件静态链接库供主程序代码调用的库文件,在编译时,静态链接库里面的功能都会被打包到主程序里,成为主程序的一部分动态链接库供主程序调用,需要跟随主程序一起发布,到运行时才会被动态调用可执行文件能够被操作系统调用,直接启动一个应用进程的文件关联静态链接库,动态链接库和可执行文件,都是由目标文件链

2020-05-16 20:28:24

【Android】【NDK】解决Lame库编码MP3声音速度变快的问题

这个问题可能是由于把单声道PCM作为双声道PCM来编码造成的这样就有一半的数据从左声道被编到了右声道,于是播放速度快了一倍,总时长短了一半我看网上大多Lame库的Demo都默认是双声道,没有考虑到单声道的问题解决方法:单声道和双声道分开进行编码 //转码单声道PCM void encodeSingleChannelPcm() { int bufferSize = 1024 * 256; short *buffer = new short[bufferSize / 2];

2020-05-16 15:11:32

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 技术圈认证
    技术圈认证
    用户完成年度认证,即可获得
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。
  • 原力新人
    原力新人
    在《原力计划【第二季】》打卡挑战活动中,成功参与本活动并发布一篇原创文章的博主,即可获得此勋章。
  • 分享宗师
    分享宗师
    成功上传21个资源即可获取