202104-07 Android SeekBar实现平滑滚动 本文实例为大家分享了AndroidSeekBar实现平滑滚动的具体代码,供大家参考,具体内容如下由于项目需要,SeekBar只需要三个档,但是如果只设置三个档会很难滑,看着也不好看,于是我将其设置为100,然后自动滑到0,50,100的位置大部分代码还是跟之前一样,只是把max改为100,progress改为50<SeekBarandroid:layout_width="match_parent"android:layout_height="wrap_content"android:max="100"android:thumb="@drawable/de... 继续阅读 >
202104-07 Android SeekBar实现禁止滑动 本文实例为大家分享了AndroidSeekBar实现禁止滑动的具体代码,供大家参考,具体内容如下由于项目需要,在关闭开关的时候需要将顶部的调温栏禁用,变为灰色且不可点击滑动,而开的时候要启用,变为黄色且可点击滑动为防止抓不住重点,仅展示相关代码publicclassDeviceControlActivityextendsActivityimplementsView.OnClickListener,SeekBar.OnSeekBarChangeListener{privateSeekBarmSeekBar;privateTextViewmLowTempT... 继续阅读 >
202104-07 Android中SeekBar拖动条使用方法详解 本文实例为大家分享了Android中SeekBar拖动条使用方法的具体代码,供大家参考,具体内容如下SeekBar控件效果展示 拖动条SeekBar继承了ProgressBar,因此ProgressBar所支持的xml属性和方法完全适合SeekBar。只是进度条ProgressBar采用颜色填充来表明进度完成程度,拖动条SeekBar则通过滑块的外置来标识——拖动滑块允许进度值的改变。(例如:条件Android系统的音量)如上图,通过拖动SeekBar滑块,实现图片透明度的修改。实现... 继续阅读 >
202104-07 Android实现本地Service方法控制音乐播放 问题现象描述:在Activity中控制播放时,按返回键退出应用后,音乐可在后台继续播放。重新进入app,音乐无法停止,重新点击开始播放音乐,出现重复的音乐同时播放的现象(多个同时播放)。如何解决?解决方法:使用本地Service的方式来控制音乐的播放,app返回退出了,重新进入App也可以正常终止。1、主Activity控制音乐的开始、暂停、停止、退出空能,(具体实现在下面MusicService.java中实现)/***Activity播放广播,返回键... 继续阅读 >
202104-07 Android运动健康睡眠自定义控件的实现 效果图代码/****日图表*zrj2020/8/25*/classSleepDayChart(context:Context,attrs:AttributeSet?):View(context,attrs){//屏幕宽高privatevarscrWidth=0fprivatevarscrHeight=0fprivatevarxData:Array<String>=arrayOf("20:00","02:00","08:00","14:00","20:00")privatevarsleepsData:Sleep?=nullprivatelateinitvarpaintLine:PaintprivatelateinitvarpaintGra... 继续阅读 >
202104-07 Android使用插件实现代码混淆 我们在打包的过程中,需要对代码进行混淆处理,可项目中需要混淆的地方很多,特别是添加依赖的,如果要我们一个一个添加,无疑这大大的添加了我们的工作量,下面介绍用插件的方式来对代码进行混淆。使用流程:下载AndroidProGuard插件并安装重启。在菜单栏的Edit下拉菜单中选择AndroidProGuard选项。如果弹出成功对话框,就可以按Ctrl+V粘贴到项目的proguard-rules.pro文件。根据proguard-rules.pro报错的提示进行修改成。... 继续阅读 >
202104-07 Android 如何实现弹窗顺序&优先级控制 一般在项目首页中,往往会有多个对话框需要弹出,比如活动弹窗、更新弹窗、评分弹窗等等,而且这些弹窗是有优先级顺序的。这些弹窗一般是通过接口请求后返回结果再显示的,如果只有几个弹窗还好处理,业务逻辑上判断一下先后显示就可以。如果有十几个或者更多,那么处理起来将非常麻烦,而且容易出现问题。所以封装一个可以按照优先级顺序显示的弹窗功能就非常有必要,首先功能需求如下:按优先级顺序阻塞式显示各种类型弹窗,默... 继续阅读 >
202104-07 详解android是如何管理内存的 前言很高兴遇见你~内存优化一直是Android开发中的一个非常重要的话题,他直接影响着我们app的性能表现。但这个话题涉及到的内容很广且都偏向底层,让很多开发者望而却步。同时,内存优化更加偏向于“经验知识”,需要在实际项目中去应用来学习。因而本文并不想深入到底层去讲内存优化的原理,而是着眼于宏观,聊聊android是如何分配和管理内存、在内存不足的时候系统会如何处理以及会对用户造成什么样的影响。Android应用基... 继续阅读 >
202103-30 Android ServiceManager的启动和工作原理 ServiceManager启动所有的系统服务都是需要在ServiceManager中进行注册的,而ServiceManager作为一个起始的服务,是通过init.rc来启动的。//system\core\rootdir\init.rc//启动的服务,这里是用的服务名称。服务名称是在对应的rc文件中注册并启动的startservicemanager具体的服务信息是在servicemanger.rc命名并定义的//\frameworks\native\cmds\servicemanager\servicemanager.rcserviceservicemanager/system/bin/servi... 继续阅读 >
202103-30 Android zygote启动流程详解 对zygote的理解在Android系统中,zygote是一个native进程,是所有应用进程的父进程。而zygote则是Linux系统用户空间的第一个进程——init进程,通过fork的方式创建并启动的。作用zygote进程在启动时,会创建一个Dalvik虚拟机实例,每次孵化新的应用进程时,都会将这个Dalvik虚拟机实例复制到新的应用程序进程里面,从而使得每个应用程序进程都有一个独立的Dalvik虚拟机实例。zygote进程的主要作用有两个:启动SystemServer。孵化应... 继续阅读 >
202103-30 Android AMS启动详解 启动在Android系统启动流程中中我们提到过,AMS是在system_service中启动的,//frameworks/base/services/java/corri/android/server/SystemServer.java//该方法主要启动服务ActivityManagerService,PowerManagerService,LightsService,DisplayManagerService,PackageManagerService,UserManagerService。//设置ActivityManagerService,启动传感器服务。startBootstrapServices();//启动引导服务//该方法主要//启动服务... 继续阅读 >
202103-30 详解Android系统启动过程 计算机是如何启动的计算机的硬件包括:CPU,内存,硬盘,显卡,显示器,键盘鼠标等输入输出设备。所有的软件都是存放在硬盘中,程序执行时,需要将程序从硬盘上读取到内存中,然后加载到CPU中来运行。当按下开机键时,内存中什么都没有,因此需要借助某种方式,将操作系统加载到内存中,而完成这项任务的就是BIOS。引导阶段BIOS:BIOS是主板芯片上的一个程序,计算机通电后,第一件事情就是读取BIOS。BIOS首先进行硬件检测,检查计... 继续阅读 >
202103-30 Android 如何获取设备唯一标识 一.先简单总结一下比较常见的几个解决方案的弊端:1.IMEIAndroid10中官方明确说明第三方应用无法获取到IMEI码:Android10中的隐私权变更,Android10以下的版本,需要申请READ_PHONE_STATE权限。2.AndroidIDAndroidID不具有真正的唯一性,ROOT、刷机、恢复出厂设置、不同签名的应用等都会导致获取的AndroidID发生改变,并且不同厂商定制的系统的BUG会导致不同的设备可能会产生相同的AndroidID。3.MAC地址Android... 继续阅读 >
202103-30 Android LiveData使用需要注意的地方 关于LiveData是什么以及基本使用方式,请参考官方文档:developer.android.com/topic/libra…简单来说,LiveData是一个可被观察的数据容器类。它将数据包装起来,使得数据成为“被观察者”,页面成为“观察者”。当ViewModel存放页面所需要的各种数据发生变化时,通过LiveData的方式实现对页面的通知,完成ViewModel与页面组件之间的通信。那么在使用时发现有以下几个地方需要注意:1.回调通知LiveData的观察者会在每次进入活跃态... 继续阅读 >
202103-30 Android nativePollOnce函数解析 nativePollOnce的实现函数是android_os_MessageQueue_nativePollOnce,代码如下:android_os_MessageQueue.cppstaticvoidandroid_os_MessageQueue_nativePollOnce(JNIEnv*env,jobjectobj,jintptr,jinttimeoutMillis)NativeMessageQueue*nativeMessageQueue=reinterpret_cast<NativeMessageQueue*>(ptr);//取出NativeMessageQueue对象,并调用它的pollOncenativeMessageQueue->pollOnce(timeoutMil... 继续阅读 >
202103-30 从源码角度分析Android的消息机制 前言说到Android的消息机制,那么主要的就是指的Handler的运行机制。其中包括MessageQueue以及Looper的工作过程。在开始正文之前,先抛出两个问题:为什么更新UI的操作要在主线程中进行?Android中为什么主线程不会因为Looper.loop()里的死循环卡死?UI线程的判断是在ViewRootImpl中的checkThread方法中完成的。对于第一个问题,这里给一个简单的回答:如果可以在子线程中修改UI,多线程的并发访问可能会导致UI控件的不可预期... 继续阅读 >