Android
文章平均质量分 89
Android
HankingHu
这个作者很懒,什么都没留下…
展开
-
java Thread
线程(Thread)是CPU调度和分派的基本单位。线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。 线程和进程的关系是:线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。线程的使用有继承Thread,和传入Runnable,FutureTask等方式2、传入runnable参数3、传入FutureTask参数跟runnable不同的是通过FutureTask.get()可以获取线程执行的返回结原创 2022-07-03 14:04:40 · 920 阅读 · 1 评论 -
android AsyncTask详解
AsyncTask是Android中用来执行异步执行耗时操作的框架。继承AsyncTask,并且实现doInBackground方法。其中doInBackground中进行耗时操作,比如网络请求,文件读取等。如下方法执行AsyncTask,execute方法必须在ui线程中进行,2、AsyncTask实现从AsyncTask的execute方法进行分析启动AsyncTask的方法,源码如下AsyncTask默认的Executor是sDefaultExecutor,看下sDefaultExecutor原创 2022-07-03 13:47:54 · 1524 阅读 · 0 评论 -
Android service
service类型android中service分为background service,bound service,foreground servce,其中background service运行在后台与ui没有交互,bound service通过service connect可以跟activity等通过binder进行数据交互,也可以进行多进程通信。 Foreground service与notification绑定,通过notification通知用户。暂时无法在飞书文档外展示此内容1、fore原创 2022-05-30 11:57:11 · 4944 阅读 · 1 评论 -
android aidl
1、什么是aidlAidl 全称Android Interface Definition Language,Android接口定义语言,用于定义进程之间通信协议。2、进程通信Android中系统提供了很多服务,例如AlarmManager,NotificationManager等,这些服务都在system server进程中,Android中应用有自己的进程,如下图:application所在进获取服务时需要跟system server进程进程通信。当应用想要获取AlarmManger服务时可以通原创 2022-05-28 17:34:51 · 970 阅读 · 0 评论 -
Android弹性webview实现和冲突解决
弹性webview要实现webview上下滑动到顶部时做弹性动画,最终的实现效果如下:实现方案1、自定义弹性scrollview嵌套webview1、定义HScrollView继承NestedScrollView并且重写onTouchEvent方法,在onTouchEvent中处理动画。根据事件的顺序,可以在move事件中对scrollview进行弹性处理,在up中进行回弹处理,代码如下: override fun onTouchEvent(ev: MotionEvent): Boole原创 2022-05-17 18:22:33 · 1820 阅读 · 0 评论 -
webview之JSB通信原理
1、前言在这个移动互联网盛行的时代,移动应用的开发就需求量剧增,早期的移动端应用大都使用原生开发(android,ios),而现在的移动开发技术选型上基本都是混合开发(Hybrid),混合开发是一种开发模式,指使用多种开发模型开发App,通常会涉及到两大类技术:原生Native、Web H5。2、WebViewA View that displays web pages.webView是移动端(原生)提供的运行web的环境,它是一种嵌入式浏览器,原生应用可以用它来展示网络内容。可与页面JavaSc原创 2022-05-15 14:27:35 · 3000 阅读 · 0 评论 -
webview性能优化—webview预创建
webview性能优化原创 2022-05-15 11:19:30 · 1969 阅读 · 0 评论 -
BottomSheetDialogFragment实现弹出和消失自定义Spring动画
想要给BottomSheetDialogFragment的弹出和消失加spring动画1、遇到的问题由于是spring的动效,无法使用下面设置windowAnimations的方法来@Overridepublic void onActivityCreated(Bundle arg0) { super.onActivityCreated(arg0); getDialog().getWindow() .getAttributes().windowAnimations = R.st原创 2022-05-05 11:55:51 · 1775 阅读 · 0 评论 -
可以折叠Gridview
可以折叠Gridview实现原理1、折叠实现重写gridview的setAdapter方法 @Overridepublic void setAdapter(ListAdapter adapter) { if (foldNm > 0) { //进行折叠 adapter = new FoldViewGridAdapter(adapter, foldNm); } super.setAdapter(adapter原创 2021-12-18 11:29:56 · 883 阅读 · 0 评论 -
Android调试技巧
1、定位activity有时候看到页面但是不知道页面相关的代码在哪,可以用下面两种方法快速定位1、layout inspectorLayout inspector中会已窗口的形式展示当前的activity2、adb可以通过adb打印当前显示的activity也有两种方式1、 adb -d shell dumpsys activity activities | grep mResumedActivity打印的log如下:hanking@C02CP0QNMD6V Noted-Android原创 2021-12-04 16:56:43 · 5200 阅读 · 2 评论 -
asm实现注解打印log
hanno_ _| | | | | |__| | __ _ _ __ _ __ ___ | __ |/ _` | '_ \| '_ \ / _ \| | | | (_| | | | | | | | (_) ||_| |_|\__,_|_| |_|_| |_|\___/通过字节码插件实现注解打印log,注解可以加在类上面,也可以加在方法上面,当加在类上面时会打印全部方法的log,当加在方法上面时打印当前方法的logHann原创 2021-12-03 15:08:43 · 3010 阅读 · 0 评论 -
自己动手写Android内存泄漏检测工具
内存泄漏检测对于Android来说主要泄漏的对象是activity和fragment,检测activity或者fragment的泄漏方式简单流程如下:上面的流程主要是:1、监听activity/fragment的生命周期的onDestroy事件。2、监听到activity/fragment的onDestroy后主动发起一次Gc,对象会在Gc后被回收,发起Gc后就可以针对对象是否被回收来判断是否有内存泄漏3、判断activity/fragment是否被回收4、如果有内存泄漏,生成一个内存泄漏的数据原创 2021-11-02 17:15:19 · 634 阅读 · 0 评论 -
Android clippling使用
Android clippingClipping在Android中如果多个view嵌套的会引起overdraw,很多时候一些view被覆盖了,对用户是不可见的,但是依然会进行绘制,这个时候使用clipping来进行对不可见区域进行裁剪,可以减少overdraw提高gpu的效率。如下图所示:使用clipping rectangle就可以实现对view的裁剪。使用clipping能达到的效果clipping的使用也很简单:1、裁剪出想要渲染的部分canvas.clipRect(clipRect原创 2021-08-22 15:41:01 · 610 阅读 · 0 评论 -
activity启动模式你所不知道的异常情况
前言虽然了解activity的四种启动模式,但是在一些复杂场景下,各种启动模式会出现的现象,以及现象的原因可能并不清楚,再加上个taskAffinity launchMode clearTaskOnLaunch 这些参数会使得更加懵逼。所以根据在实际应用中遇到的问题总结一下。task 和 Back Stack要了解activity的启动模式,必须要先了解task以及back stack,这两个概念,因为activity不同启动模式下不同表现是跟这两个密切相关的。back stack:存放activi原创 2021-07-11 20:46:10 · 776 阅读 · 1 评论 -
android中hprof文件分析
Hprof基本概念hprof最初是由J2SE支持的一种二进制堆转储格式,hprof文件保存了当前java堆上所有的内存使用信息,能够完整的反映虚拟机当前的内存状态。格式Hprof文件由FixedHead和一系列的Record组成,Record包含字符串信息、类信息、栈信息、GcRoot信息、对象信息。每个Record都是由1个字节的Tag、4个字节的Time、4个字节的Length和Body组成,Tag表示该Record的类型,Body部分为该Record的内容,长度为Length。Android原创 2021-04-22 15:03:33 · 9319 阅读 · 0 评论 -
Canvas加动画,实现火柴人跳绳效果
canvas加动画class PathDrawable extends Drawable implements AnimatorUpdateListener { private Path mPath; private Paint mPaint; private ValueAnimator mAnimator; public PathDrawable() { mPath = new Path(); mPaint = new Paint();原创 2021-04-13 19:27:35 · 2377 阅读 · 4 评论 -
android实现音乐跳动效果
效果图使用方法<com.masoudss.lib.DanceView android:id="@+id/danceView" android:layout_width="320dp" android:layout_height="300dp" android:layout_gravity="center" app:color_center="@color/r原创 2021-04-08 17:55:32 · 2691 阅读 · 2 评论 -
android 算法可视化(1) --冒泡排序可视化实现
前言以前写了很多算法相关的博客,每篇博客都会用word或者processing画上很多图,非常浪费时间,那时候就一直有考虑能不能使用程序来实现这种过程,不仅不用自己画那么图,而且编程实现可视化的话,还可以动态更清晰的表现算法的过程。于是查找了相关的资料和自己对算法的理解先实现一个冒泡排序的可视化,代码是Android的。效果实现看上面的动画实现主要分为三个部分,每一个数组元素的绘制遍历数组中当前元素时的绘制交换时的绘制1、每一个数组元素的绘制public class SortingV原创 2021-04-04 11:01:41 · 815 阅读 · 0 评论 -
adb启动失败解决
1、问题Mac中Android studio连接手机,经常连接不上,或者安装应用的时候经常掉线,报错daemon not running; starting now at tcp:5037具体报错信息如下:./adb start-serverdaemon not running; starting now at tcp:5037ADB server didn't ACKFull server startup log: /var/folders/qs/4rm57lbs2hq4xtf0_xt4x1k原创 2021-03-21 14:59:14 · 2409 阅读 · 0 评论 -
红米note 4x播放视频切后台返回黑屏问题
现象使用mediaPlay+TextureView播放和显示视频,在红米note4x上视频播放时切后台返回时视频区域黑屏,提示音频可以继续播放,在其他手机上播放时没有这种问题。分析解决方法参考1、https://developer.android.com/reference/android/media/MediaPlayer2、https://developer.android.com/guide/topics/media/mediaplayer...原创 2021-01-11 20:50:10 · 1292 阅读 · 1 评论 -
Android卡顿检测及优化
前言之前在项目中做过一些Android卡顿以及性能优化的工作,但是一直没时间总结,趁着这段时间把这部分总结一下。卡顿在应用开发中如果留意到log的话有时候可能会发下下面的log信息:I/Choreographer(1200): Skipped 60 frames! The application may be doing too much work on its main thread.在大部分Android平台的设备上,Android系统是16ms刷新一次,也就是一秒钟60帧。要达到这种刷新原创 2020-06-19 15:47:44 · 7290 阅读 · 2 评论 -
tinker热更新原理
什么是 Tinker?Tinker 是一个开源项目(Github链接),它是微信官方的 Android 热补丁解决方案,它支持动态下发代码、So 库以及资源,让应用能够在不需要重新安装的情况下实现更新。热更新方案比较当前市面的热补丁方案有很多,其中比较出名的有阿里的 AndFix、美团的 Robust 以及 QZone 的超级补丁方案。1、AndFix作为native解决方案,首先面临的是稳定性与兼容性问题,更重要的是它无法实现类替换,它是需要大量额外的开发成本的;2、Robust兼容性与成功率原创 2020-06-04 16:57:24 · 2276 阅读 · 0 评论 -
三幅图弄懂EventBus核心原理
前言好多分析EventBus的文章,喜欢上来就贴源码,我看了好多次总是迷迷糊糊的,这次花时间彻底整理一下EventBus,发现EventBus核心其实就是三幅图,这三幅图涉及的是三个HashMap表,弄懂这三幅图那么EventBus就懂了。第一幅图subscriptionsByEventType1、第一幅图typesBySubscriber先看一段在activity中注册和反注册Even...原创 2020-04-16 16:34:50 · 3304 阅读 · 2 评论 -
Android中Handler问题汇总
前言handler机制几乎是Android面试时必问的问题,虽然看过很多次handler源码,但是有些面试官问的问题却不一定能够回答出来,趁着机会总结一下面试中所覆盖的handler知识点。1、讲讲 Handler 的底层实现原理?要理解handler的实现原理,其实最重要的是理解Looper的实现原理,Looper才是实现handler机制的核心。任何一个handler在使用sendMes...原创 2020-04-04 16:56:20 · 1857 阅读 · 0 评论 -
Android编译器Dalvik vs ART
DalvikDalvik是Just In Time(JIT)编译器,也就是说及时编译器。在Dalvik编译器中,只有当前需要执行的代码才会变编译,剩下的代码在后面要使用的时候才会被编译。Dalvik仅仅只是编译运行时需要的部分代码,不会一次把所有的代码进行编译,所以会使用很少的手机内存空间。JIT框架JIT编译JIT工作流程ARTART 又被称为Ahead Of Time(AO...原创 2020-04-03 21:05:43 · 853 阅读 · 0 评论 -
减少apk大小
减少资源数目移除无用资源1、使用lint工具进行检测res/layout/preferences.xml: Warning: The resource R.layout.preferences appears to be unused [UnusedResources]注意lint不会检测asset文件夹中的文件2、使用shrinkResources如果如果在 app的buil...原创 2019-12-18 10:17:42 · 1164 阅读 · 0 评论 -
WorkManager完全解析
前言Workmanager原创 2019-01-20 21:06:09 · 5481 阅读 · 0 评论 -
git安装上传本地代码以及遇到的问题
GitGit是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Windows版本Git下载地址https://git-scm.com/download/win下载下来后直接点击exe文件完成安装。上传本地代码到Github上要上传代码到github上先要在github上注册用户,注册完成后记住用户名和密码, 然后在github上新建一个repo原创 2018-01-30 16:38:41 · 915 阅读 · 0 评论 -
Android即时通讯和sns开源项目汇总
这是一个整理即时通讯(IM)和社交系统(SNS)优秀开源项目的文档,项目上传github欢迎提交更新。 一 即时通讯和社交系统平台1 环信(推荐) 2 阿里百川 云旺 3 融云 4 OpenSNS …… 二 基于环信的即时通讯开源项目数据整理自环信官网,网络数据和github。更多信息请参考环信官方网站和ImGeek1 高仿微信:基于环信SDK高仿微信介绍:转载 2018-01-29 16:45:35 · 1130 阅读 · 0 评论 -
Android组件安全详解
2016-09-03 简析Android组件安全 Mobile android 前言前段时间在学习github上DroidPlgin插件的时候接触到不少专业术语,诸如预先占坑、Activit转载 2017-04-05 10:37:19 · 4280 阅读 · 0 评论 -
Android应用自动更新功能
一个好的应用软件都是需要好的维护,从初出版本到最后精品,这个过程需要版本不停的更新,那么如何让用户第一时间获取最新的应用安装包呢?那么就要求我们从第一个版本就要实现升级模块这一功能。自动更新功能的实现原理,就是我们事先和后台协商好一个接口,我们在应用的主Activity里,去访问这个接口,如果需要更新,后台会返回一些数据(比如,提示语;最新版本的url等)。然后我们给出提示框,用户点击开始下载,下载转载 2017-03-10 10:41:11 · 755 阅读 · 0 评论 -
10个经典的Android开源应用项目
Android开发又将带来新一轮热潮,很多开发者都投入到这个浪潮中去了,创造了许许多多相当优秀的应用。其中也有许许多多的开发者提供了应用开 源项目,贡献出他们的智慧和创造力。学习开源代码是掌握技术的一个最佳方式。下面推荐几个应用开源项目,这些项目不仅提供了优秀的创意,也可以直接掌握 Android内核的接口使用:1、Android团队提供的示例项目如果不是从学习Android SDK中提供的那些样例原创 2017-03-01 16:45:22 · 1352 阅读 · 0 评论 -
Android中自定义顶部状态栏颜色
public class StatusBarUtils { public static void setWindowStatusBarColor(Activity activity, int colorResId) { try { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {原创 2017-01-05 11:26:52 · 3944 阅读 · 0 评论 -
android获得屏幕高度和宽度
1、WindowManager wm = (WindowManager) getContext() .getSystemService(Context.WINDOW_SERVICE); int width = wm.getDefaultDisplay().getWidth(); int height = wm.getDefaultDisplay(原创 2016-12-28 09:40:15 · 340 阅读 · 0 评论 -
深入了解Listview中onItemClick中的各个参数
要实现点击上面listview中每一行中的请假就会获得该行的人名来调用相应的webservice接口, departmenttongji_item:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:l原创 2016-11-16 20:52:02 · 4164 阅读 · 0 评论 -
实现qq中按返回键返回桌面不退出程序
在实际应用中,很可能我们希望自己的app在按下返回键的时候并不退出,而是像按home键一样仅仅返回桌面,而程序仍然在后台运行着。要怎么实现这个效果呢?很简单,只需要重写一下onBackPressed方法就可以了。如下所示: public void onBackPressed() { Intent setIntent = new Intent(Intent.ACTION_MAIN);原创 2016-11-06 20:32:43 · 1666 阅读 · 0 评论 -
深入浅出Android中的MVP模式
MVP模式是在MVC模式的基础之上改进而来的。MVP模式分为:model,view,presenter三部分。三部分的关系如下图所示: 其中PresenterCompl实现IPresenter接口,PresenterCompl中的方法要改变view时通过调用IView中的方法来实现。Model层为PresenterCompl提供数据。 也就是说之前MVC中view的控制都是在activity中实原创 2016-10-28 15:19:51 · 657 阅读 · 0 评论 -
自定义Toast完全解析
Toast一般用来显示一行文字,用法比较固定: Toast.makeText(Context context,String message,int duration); 但是有时候想用toast 来显示复杂的view甚至是带有图片的view时这时候就要用到自定义的Toast,自定义Toast主要用到一下几个方法如图: 1.setView()方法用来显示用户自定义的view.原创 2016-11-01 21:50:29 · 691 阅读 · 0 评论 -
自定义Toast工具类ToastUtil防止多次点击时Toast不消失
有时候我们点击一个按钮出现toast但是当不小心多次点击时,toast会重复出现,这时候通过下面的ToastUtil类可以实现不小心多次点击的问题。public class ToastUtil { /* private Context context; public ToastUtil(Context context) { this.context=context; }原创 2016-10-28 17:35:41 · 659 阅读 · 0 评论 -
Android中的Button自定义点击效果之改变点击时按钮的颜色
在Android中定义按钮的点击效果可以通过自定义selector,通过设置两张不同的背景图片来改变点击时和未点击时的状态,但有时候仅仅只想改变点击时按钮的颜色,但是在selector中并不能直接定义颜色。下面代码实现一个点击按钮时仅仅改变按钮颜色。 1. 在drawable目录下面定义:button_press.xml<shape xmlns:android="http://schemas.a原创 2016-10-25 22:14:37 · 11793 阅读 · 2 评论