自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ithouse的专栏

大道至简 返璞归真

  • 博客(369)
  • 资源 (17)
  • 问答 (3)
  • 收藏
  • 关注

原创 10年Android应用开发感想(Compose会是未来吗?)

比如在View销毁了,但对象没销毁的情况,举个例子:Navigation + Fragment的场景,就避不开onDestroyView()执行了,但onDestroy()却没执行,虽然MVP也可以在onDestroyView()的时候去清空P层的View引用,但数据恢复还是不太方便,诸如屏幕旋转等场景,要去恢复对话框等数据是比较棘手的。如果让我新开一个公司级别的项目,我还是会选择MVVM,而不是Compose,理由:丰富的传统原生开发经验,有把握迅速开发各种界面和稳定的功能,有信心保证代码的质量。

2024-09-11 14:32:13 1420 1

原创 使用WPF实现一个快速切换JDK版本的客户端工具

发现网上一键切换JDK环境的方法都是在mac或Linux下的,本人主力电脑是Windows,于是看了一下WPF的文档,自己开发了一个客户端。github链接:https://github.com/ITAnt/JavaSwitch。安装文件在根目录的release文件夹。

2024-09-29 12:02:35 653

原创 PJSIP编译

必须使用Linux编译,不要在Windows上浪费时间,编译好了再把so拷贝出来Windows即可。没有Linux?virtualbox搞一个Ubuntu不是什么难事,网速快的话半小时搞定。源码目录说明目录:lib: [PJPROJECT的lib库]pjlib:[基础框架库]pjlib-util:[辅助工具库]pjmedia:[开源的媒体栈]pjnath:[开源的NAT-T辅助库]pjsip:[开源的SIP协议栈]pjsip-apps[demo]配置准备VirtualBox6.1Ub

2022-02-23 11:53:39 2459

原创 高德地图定位相关

AMapUtils有一些计算测量相关的工具方法/** * (官方)计算两点之间的距离(米) */public static float calculateLineDistance(double lat1, double lng1, double lat2, double lng2) { lng1 *= 0.01745329251994329D; lat1 *= 0.01745329251994329D; lng2 *= 0.01745329251994329D; la

2021-11-18 09:52:02 610

原创 Android开发规范参考Java版

Android开发规范参考(Java版)一、命名风格1.类名使用 UpperCamelCase 风格不要中英文混合(通用拼音除外,如Beijing等),以每个单词首字母大写。2.方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格驼峰命名法,第一个单词首字母要小写,其他单词首字母大写。①为区分成员变量和局部变量,可以在书写成员变量时,第一个字母用m(member),其他单词遵循驼峰命名法,如mName。注意在写实体类时则不能用m表示member,因为实体类一般都是纯变

2021-11-01 21:42:14 2240

原创 记一次高德地图导致的句柄泄漏问题

Android应用开发过程中,内存泄漏是最常见的,句柄泄漏是怎么回事呢?当出现 Too many open files异常的时候,意味着文件句柄泄漏过多,句柄泄漏到一定数量之后(一般是接近1024)会导致程序卡死、文件读写异常、socket创建异常等。一般来说单一进程的最大可打开文件句柄数量为1024,可通过cat proc/进程ID/limits查看。概念:Fd的全称是File descriptor,在linux OS里,所有都可以抽象成文件,比如普通的文件、目录、块设备、字符设备、socket、管道

2021-10-11 17:26:32 942

原创 Kotlin那些让人相见恨晚的小技巧

Kotlin那些让人相见恨晚的小技巧1.扩展方法名左边写个类名加个点,就像钻进这个类的源码改了它里面代码一样,左边的类表示哪个类可以调用这个扩展函数。扩展是一种静态行为,对被扩展的类代码本身不会造成任何影响。fun receiverType.functionName(params){ body}receiverType:表示函数的接收者,也就是函数扩展的对象functionName:扩展函数的名称params:扩展函数的参数,可以为NULL防止快速点击/** * 防止快速点

2021-09-08 11:41:34 270

原创 女朋友说系统自带音乐播放器太臃肿不好用,用Kotlin捋了个本地音乐播放器

代码结构:这一次也是将MVP与JetPack进行了一个融合,这个框架断断续续维护了有大半年,写起逻辑来非常快且清晰,开源看一下示例:/** * 展示某个歌手的所有歌曲 */class ArtistSongActivity : MusicActivity<ActivityArtistSongBinding>() { private val songList = arrayListOf<SongBean>() private lateinit var mAda

2021-08-07 16:23:55 768

原创 Jenkins使用之安卓原生项目

目的:提交代码 --> Gitlab --> webhook --> Jenkins拉取代码并打包 --> 打包完成发布到蒲公英一、准备工作① 最好在局域网准备一台专门用于运行Jenkins的电脑。

2021-06-01 18:33:00 413 1

原创 解决Flutter安卓端启动白屏的问题

修改主题:styles.xml<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar"> <!-- Show a splash screen on the activity. Automatically removed when Flutter draws its first frame --> <item name="android:windowBac

2021-05-15 17:21:56 670

原创 Android获取本地视频文件缩略图时导致视频播放失败

方案一:播放视频时取消缩略图的加载。缺点:应用层实现治标不治本,还是有几率出现。方案二:源码层实现,交给底层开发人员,应该是video so库出问题了(如libMtkOmxVdec.so)。...

2020-06-20 20:25:20 560

原创 GoogleDrive视频直链播放

String url = file.getDownloadUrl();String token = GoogleDriveManager.getInstance().getCredential().getToken();package com.itant.videotest;import android.content.Context;import android.media.Medi...

2020-06-20 19:58:20 2742

原创 获取Netflix ESN

import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.Build;import android.os.Handler;impor...

2020-06-20 19:01:16 1541

原创 Flutter官方国际化方案

1.安装插件File --> Settings… --> Plugins --> 搜索“flutter Intl”,安装该插件,重启AndroidStudio2.配置与初始化配置pubspec.yaml文件新增本地化依赖:dependencies: // Other dependencies... flutter_localizations: sdk: flutter然后package get获取该依赖工程初始化在菜单栏的Tool下找

2020-06-05 11:48:42 1690 1

原创 Flutter(Dart)开发规范及相关技巧总结

基础规范篇文件命名文件名有多个单词的话,需要使用下划线进行分割,且单词均为小写。字符串相关①普通字符串建议使用单引号括起来,而不是双引号,当然非要使用双引号也是没有错误的,习惯问题。②使用三个引号(三个单引号或三个双引号都可以)创建多行字符串String str = '''Hello Dart''';③使用r创建原始raw字符串// 如果没有r,则转义字符会生效(换行) String rawStr = r'Hello \n D

2020-06-04 17:45:01 1306

原创 服务器开发优化

tomcat优化(1GB内存的机子)https://www.cnblogs.com/centos2017/p/9956432.htmlhttps://cloud.tencent.com/developer/article/1463754在catalina.sh文件中,找到cygwin=false,在这一行的前面加入参数,具体如下:JAVA_OPTS="-server -Xms256m -X...

2019-10-12 19:22:19 190

原创 从阿里云购买免费SSL证书之后部署到Tomcat以支持https

首先按照阿里云的免费SSL证书然后按要求验证和下载,没有什么大坑,需要注意的是① 我选择的是文件验证,因为我不是在阿里云买的服务器和域名,需要在tomcat/webapps目录下新建文件夹.well-known,注意前面有个点.,这个文件夹是隐藏的,直接cd进去,再建一个文件夹pki-validation,把文件上传上去,然后再继续验证。② 每次下载都会产生新密码,该密码仅匹配本次下载的证书。...

2019-09-07 00:38:26 718

转载 TV开发焦点跑飞的问题

在使用TV开发时,有可以提供使用的leanback类库里的VerticalGridView等代替手机上的RecyclerView,但实际开发中,经常还是要用到RecyclerView,RecyclerView虽然强大,在TV上却经常遇到焦点跑飞的情况,原因:RecyclerView在长按遥控器的情况下会导致Item的焦点丢失或者说是飞到别的控件上。主要是因为RecyclerView设置适配器,将...

2019-08-27 11:10:26 1304

转载 Linux下SVN服务器搭建

svnserve --version如果提示“未找到命令”,就安装:yum install -y subversion重新验证。新建一个目录作为SVN存放代码的位置:如果当前在~目录下,mkdir svnserver之后则会有~/svnserver/cd ~/svnserver新建一个项目:svnadmin create DemoProjectcd DemoProjec...

2019-07-12 09:36:31 285

原创 工厂模式的实现

工厂模式是一种设计思想,它适用于需要创建多个具体实例的场景,并且这些实例都具有一个共同的方法(动作)。比如,“发送信息”。我们都知道,发送信息的方式有很多种,但无论是用微信发送,还是用邮件发送,它们都有一个共同的动作,就是“发送”,那么可以把这个动作(send)抽象出来。1.普通工厂模式抽象的动作:package com.itant.pattern.sender;public interf...

2019-06-25 10:03:12 640

原创 Android USB(OTG) 删除文件的探索过程

package com.example.sky218790.deltest;import android.Manifest;import android.app.PendingIntent;import android.content.ActivityNotFoundException;import android.content.BroadcastReceiver;import an...

2019-06-11 11:50:27 3048

转载 关于应用调用系统权限的一些想法

在开发APP的时候,经常会遇到这种情况:想调用Android SDK的某个API实现某个功能,但是这个API是@hide的,或者private。这种情况我们通常的做法是:① 如果没有权限拦截,可以考虑反射来调用。② 有系统权限拦截,这种情况下,方法①就失效了。以下是不同的方案实现相同的效果:A. 在AndroidManifest.xml配置android:sharedUserId="andr...

2019-05-16 09:27:34 336

原创 Android系统签名文件转换为keystore文件

应用想要获取系统权限的话就必须要有系统签名,但是在开发一个系统的时候,为了系统的安全性,往往会去改变系统的签名。我们都知道通过platform.pk8 platform.x509.pem和signapk.jar可以对应用进行签名操作,但是这样很麻烦,而且也没办法使用Eclipse中的调试操作了,最简单的方式还是生成keystore然后放在Eclipse里,这样每次编译生成的APK就会自动签上名,方...

2019-04-23 10:26:10 1629 1

原创 解决获取本地视频缩略图关键帧为纯黑或纯白的问题

public static Bitmap getFirstVideoThumbnail(String path, int width, int height) { float maxSize = Math.max(width, height); MediaMetadataRetriever retriever = new MediaMetadataRetr...

2019-04-13 09:10:07 2379 2

原创 如何简单地进行国际化翻译

Android开发中,有做过国际化的同学都知道,如果公司没有专门的翻译团队,需要开发自行翻译多国语言,是一件非常痛苦的事情。通常我们的做法是:复制一行–>到百度翻译或谷歌翻译–>选取目标翻译语言–>复制翻译结果到对应的xml文件里。这样有什么弊端呢?这是纯体力活,如果只有几行还好,但是上千行呢?如果只需翻译一两种外语还好,但是二十多种语言呢?岂不得累死,那么我们能不能相对优雅...

2019-03-28 16:21:08 1298 1

原创 如果有一天我不更新博客了

如果有一天我不更新博客了,或许我已经不是程序员了。1.关于就业选择就业方向是很重要的,有很多同学选择自己所学专业,一部分则选择了其他方向。无论选择什么方向,自己必须冷静思考后决定。有人问,到底要不要选择自己的兴趣作为工作?我的建议是尽量选择自己感兴趣的,因为这样你才会有动力,你才会坚定自己的方向。刚毕业那会儿,迷茫而慌张,记得那时候,出来实习,学习了一个星期的ActionScript3...

2019-03-25 22:22:02 1440 12

原创 pm命令安装apk

安装apk有很多种方法,除了常见的打开开发者中心–debug模式① 使用adb命令adb install apk路径② 使用串口工具【Android P之前】,连接之后,su,然后使用pm进行安装:pm install -r apk路径② 使用串口工具【Android P之后】,连接之后,su,接着cd到apk所在路径,然后使用pm进行安装:首先查看apk的大小:wc -c Sk...

2019-03-12 15:51:52 7661

原创 Android源码模块编译mm编译成功但签名不一致的问题

参与系统源码开发的时候,负责某个模块(系统APP)的开发,通常来说,源码全编译之后,以后想要单独编译模块,直接cd到具体的模块路径下,执行mm(或者上一级执行mmm + 模块名)就可以单独编译该模块。然而其中出现了一个比较诡异的问题:全编译的时候,模块对应的apk会在out\target\product\open_uhd_ap\system\product\app\目录下生成;后来改动了代...

2019-03-08 10:55:40 816

原创 android tv 实现弹出通知

谷歌官方文档已经说了,Android TV要给用户展现的是沉浸式的体验,不希望过多被干扰,所以,普通的Notification是无效的。思路:一个透明的Activity+自定义Dialog实现类似弹出通知的效果。先上效果图:styles.xml&amp;amp;lt;resources&amp;amp;gt; &amp;amp;lt;!--透明主题--&amp;amp;gt; &amp;amp;lt;style name=&amp;q

2019-01-24 08:22:34 3411 5

原创 gradle插件开发

记得我以前曾经发布过一篇发布类库到jCenter的文章:Android开发发布lib到jcenter,发布成功之后,只需要在gradle写一行compile…就可以把类库导进来。当然,你如果觉得麻烦也可以使用第三方的工具,如jitpack,可以很方便把你在GitHub上的项目发布为类库。好了,言归正传,今天主要说一下和发布类库很相似的发布gradle插件教程,你可能见过很多项目除了通过compi...

2019-01-12 13:11:50 1515

原创 Android Space引起TextView走马灯marquee的一个显示bug

在Android TV开发的时候,需要用到一个TextView的走马灯效果,发现一个很诡异的UI问题。先看看item的layout:&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/androi

2018-12-11 19:58:50 640

原创 【原创APP】百度地图显示3个位置

有这么一个场景,我在位置1,我朋友在位置2,我们想去位置3,想知道这3个地点之间的距离关系(直线距离)

2018-11-22 19:48:41 1487

原创 Google Play超大安装包分包技术详细流程

这里说的“分包”不是dex文件的“分包”技术,而是针对大体积(超过100MB)的APK上架Google Play的技术。首先奉上的是官方说明文档,如有需要可以自行查看,本文除了涵盖官方文档的步骤,还详细说明了可能遇到的一些坑。什么是APK扩展文件我们平时开发的应用安装包大小一般都不会超过100MB,但是在开发游戏应用或者包含较多资源文件的应用时,很可能会超过100MB,这个时候是不能直接上架G...

2018-11-15 21:31:14 17721 5

原创 TV开发过程中WebView里的按钮获取不到焦点的问题

我们都知道,TV不像手机,目前大多数TV的屏幕都是不支持触屏的,所以,焦点的控制只能依靠遥控器的方向按钮进行焦点转移。在开发Spotify授权的过程中,发现Spotify的WebView授权界面里的按钮得不到焦点,它原来的布局是&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot; andro...

2018-11-12 22:01:14 2226

原创 支付宝支付个人收款实现的另一个思路

我们都知道,支付宝和微信早就不支持个人开发者收款SDK了,在申请的时候,无论你选的是个人开发者还是公司,都必须提交营业执照,这对我们开发者来说,无疑是很高的门槛。而其他第三方的支付平台,要么收费率太高,要么不靠谱,随时都可能捐款走人,所以自己总结了一个另类的思路,适用于不严格的收款业务。思路如下:点击VIP服务,判断是否为VIP会员如果不是VIP,则弹出购买信息的对话框用户点击确定支付按钮...

2018-10-09 11:43:09 15153 7

原创 通知监听的实现

目标:本应用想监听其他应用弹出的通知信息实现:继承NotificationListenerServicepackage com.itant.payhelper;import android.app.Notification;import android.content.Intent;import android.os.Build;import android.os.Bundle...

2018-10-09 11:16:28 3892

原创 Dagger从入门到放弃

Dagger的好处: 使用Dagger2 的好处比较明显的就是,可以方便的修改,构建对象。 比如很多对象的构建都需要Context,你只要有一个可以提供Context的moudule就可以了,还可以比较方便的控制对象的生命周期,简单来讲就是可以很方便的构建和修改对象的构造函数(只需要维护好Component,module,当然这些对于新手并不简单)。Dagger的缺点: 1.移动类到不同的...

2018-10-03 15:53:20 850

原创 圆角ImageView的几种实现方法

①自定义Viewimport android.content.Context;import android.content.res.TypedArray;import android.graphics.Bitmap;import android.graphics.Bitmap.Config;import android.graphics.Canvas;import android.gr...

2018-10-03 15:41:56 1068

原创 输出2的100次方

public class PowerResult { public static void main(String[] args) { List&amp;lt;Integer&amp;gt; result = new ArrayList&amp;lt;Integer&amp;gt;(); result.add(2); // 2的100次方,当然是用2乘99次2啦,难道不是...

2018-10-03 15:21:07 2620 1

原创 写的一个小清新的备忘录应用

“吾身琐事三千,记忆恒久留存”,吾记是一款安全的备忘录应用,可以记录生活的点滴。在上高中的时候,就想有一本可以随身携带的备忘录,但是随身携带还是太麻烦了,那时候还没开始接触安卓呢。吾记可以定制各种背景主题,包括自定义皮肤,虽然远远比不上有道云笔记、印象笔记这些大公司的产品,但吾记是完全免费的,可以随心使用自己喜欢的皮肤。客户端方面:整体项目框架是MVP,配合RxAndroid挺好的,主要使...

2018-09-17 23:04:39 1810 1

Android平台下MonkeyTalk使用流程

Android平台下MonkeyTalk使用流程

2014-11-13

JavaScript编程规范

集谷歌JavaScript编程规范指南和众多老程序员的编程习惯,将JavaScript的编程规范娓娓道来,并且解释了部分书写习惯的原因。

2015-06-30

Google Pixel手机壁纸

Google Pixel Wallpaper of 2017

2022-02-08

个人封装的MVP框架使用例子

请使用AndroidStudio4.2+运行

2022-02-08

Jackson JSON jar包

Jackson JSON 三个jar包,Jackson JSON是一个非常方便强大的JSON框架,使用其让我们的开发游刃有余。

2015-06-09

proguardgui代码混淆工具

Java代码混淆工具,能够把类名、变量名混淆成诸如abcdefg的格式。

2016-06-07

Eclipse默认快捷键

Eclipse常用快捷键,加入个人整理。

2014-11-13

pinyin4j-2.5.0.jar汉字转拼音

将中文字符(字符串)转换为对应的拼音的工具类

2015-11-05

ttf字体抽取工具-仅供参考

ttf字体抽取工具

2017-04-11

adb工具免安装AndroidSDK版

不用安装AndroidSDK,直接在Windows系统cmd使用

2021-11-17

吾记APP是一个支持换肤的应用简约风格

可以换肤的备忘录应用,使用MVP + OKHTTP + RxAndroid实现

2018-09-17

Win10共享文件到局域网

Windows 10系统下共享文件到局域网,有几个地方需要注意,如取消访客禁用,启动共享等。

2019-05-07

IntelliJ IDEA快捷键

IntelliJ IDEA快捷键,加入个人整理。

2014-11-13

竹翎(Material风格的APP)

一款Material Design风格的安卓APP,运用了MVP、rxandroid、okhttp、Material Design等技术。

2017-04-04

【微信支付】公众号支付接口文档V2.7

【微信支付】公众号支付接口文档V2.7,仅供参考。

2014-11-21

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

TA关注的人

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