
android开发
文章平均质量分 67
liujun3512159
这个作者很懒,什么都没留下…
展开
-
Kotlin:内置函数let、also、with、run、apply大大提高你的开发效率!
Kotlin:内置函数let、also、with、run、apply大大提高你的开发效率!转载 2024-02-27 08:20:32 · 578 阅读 · 0 评论 -
手机屏幕的分辨率和图像尺寸关系
手机屏幕的分辨率和图像尺寸关系转载 2022-08-24 08:28:44 · 5138 阅读 · 0 评论 -
adb shell 获取手机分辨率
分辨率获取办法原创 2022-08-24 08:21:17 · 8462 阅读 · 0 评论 -
Android:获取屏幕(实际和可用)分辨率
Android:获取屏幕(实际和可用)分辨率转载 2022-08-24 08:18:25 · 5307 阅读 · 0 评论 -
Any 和Obejct
Any 和Obejct转载 2022-07-20 08:04:25 · 248 阅读 · 0 评论 -
android pair类用法,有序键值的一种:Pair
在某些情况下,既需要已键值的方式存储数据列表,还需要在输出的时候保持顺序。HashMap满足前者,ArrayList则满足后者,再不打算去多做修改且数据类型相对简单时,可以选择Android提供的一种工具类:Pair(搭配ArrayList)。1. Pair 实例Pair生成实例的方式有两种:Pair pair = new Pair(1, "3");orPair pair = Pair.create("1", 3);实际上方式二在内部的实现只是对方式一的调用:public sta转载 2022-05-28 15:24:42 · 2518 阅读 · 0 评论 -
aidl调用的源码
在用aidl进行跨进程调用的时候,为了便于理解,整理部分源码,有空的时候看看。aidl部分/* * This file is auto-generated. DO NOT MODIFY. * Original file: frameworks/base/core/java/android/os/IFregService.aidl */package android.os;public interface IFregService extends android.os.IInterfac原创 2022-05-27 08:48:17 · 2295 阅读 · 0 评论 -
SystemU_Keyguard 启动流程
SystemU_Keyguard 启动流程 本文将比较全面的介绍 SystemUI Keyguard 启动流程。本文基于 android9.0 源码进行分析。一、SystemUI Keyguard 组成 Android 的 KEYGUARD 相关类提供了屏幕锁屏等相关功能,虽然功能简单,但是相关 的逻辑还是挺复杂的,要处理屏幕处于丌同状态的情况,要监控各种事件(时间,电池, Sim 状态,电话状态),因此 GOOGLE 还是对屏幕功能迚行了细致的设计,架构上采用了 中介模式、MV..原创 2022-05-26 07:50:54 · 672 阅读 · 0 评论 -
android锁屏流程_Android开机锁屏流程分析
Android开机锁屏流程: 首先:手机开机时,在SystemServer类的init2()方法中会启动线程类ServerThread的run方法如下: WindowManAndroid开机锁屏流程:首先:手机开机时,在:WindowManagerService wm = null; ...try {wm.systemReady(); //systemReady()方法。mPolicy.systemReady(); //调用PhoneWindowManager .java中的syste转载 2022-05-25 23:10:25 · 1339 阅读 · 0 评论 -
Android10.0 Binder通信原理(十)-AIDL原理分析-Proxy-Stub设计模式
1.概述上一节我们写了一个AIDL的示例,实现了两个应用之间的通信,这一节我们就来一起探讨下AIDL是如何生效的。2.什么是AIDLAIDL:Android Interface Definition Language,即Android接口定义语言。Android系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信。为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote Procedure Call,RPC)方式来实现。转载 2022-05-20 08:23:25 · 1445 阅读 · 0 评论 -
Android Context.getSystemService() 与 ServiceManager 的理解和使用
背景这几天在天天在写Context.getSystemService()获取系统服务,例如在获取窗口服务的时候都会这样写:WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);突然有人问我说,就是getSystemService() 每次获取的对应的WindowManager是否是同一个,还是每次生成新的?直接翻看了下源码,事实上还是比较简单的,以下做一下记录:分析转载 2022-04-30 12:42:45 · 2033 阅读 · 0 评论 -
ServiceManager.getService和Context.getSystemService
Context.getSystemService流程拿获取TelephonyManager实例举例: TelephonyManager tm = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);其中mContext是Context的一个实例frameworks/base/core/java/android/content/Contex转载 2022-04-30 12:35:43 · 1294 阅读 · 0 评论 -
android service的类型,Android service 两种启动模式
1.startservice使用service的步骤:1.定义一个类继承service2.在manifest.xml文件中配置该service3.使用context的startservice方法启动该service4.不在使用时,调用stopService方法停止该服务使用这种start方式启动的service的生命周期如下oncreate-->onstartCommand-->ondestory说明:如果服务已经开启,不会重复执行oncreate 而是会调用o.转载 2022-04-29 08:20:06 · 342 阅读 · 0 评论 -
Android性能优化—耗电优化
作为移动设备,电池重要性不言而喻。怎么耗电通过上图可以知道,用户通过软件调用硬件资源而产生了耗电,那么我们可以控制软件调用硬件的频次以此达到降低耗电的目的。那么我们有哪些硬件是可以控制的呢? 移动设备元件耗电大户下面我就挑几个常用的元器件聊一聊一、视频、音频、收音机在使用这些功能的使用时候,他牵涉的不单单一个元器件的问题,而是更多,所以我们在使用这些功能的时候要做到离开即刻关闭释放。早期做直播的时候,朋友问我为啥打开直播看了半小时就手机发烫呢,如果你的应用也出现此种情况,就要转载 2022-04-29 08:15:12 · 1321 阅读 · 0 评论 -
Android根Activity启动流程简述
序言从我们点击屏幕上的应用icon,到该应用为你展示第一个可视界面,这个过程中,Android系统究竟做了什么操作?又涉及到哪些进程?整个过程是相对复杂的,我们不可能花时间去琢磨透每一行源码的作用,这样会让我们迷失在源码的海洋之中。相反,我们应该重点去关注这个过程,从大的层面,去掌握这个过程。这样,进可以深入源码之洋。退可以知此原理。一、根Activity启动过程 :1. 从Launcher到AMS。当我们点击屏幕上的应用icon时,Laucher发送启动应用的请求给AMS,因为Launcher转载 2022-04-29 08:06:05 · 181 阅读 · 0 评论 -
Android ContentProvider支持跨进程数据共享与“互斥、同步”杂谈
在开发中,假如,A、B进程有部分信息需要同步,这个时候怎么处理呢?设想这么一个场景,有个业务复杂的Activity非常占用内存,并引发OOM,所以,想要把这个Activity放到单独进程,以保证OOM时主进程不崩溃。但是,两个整个APP有些信息需要保持同步,比如登陆信息等,无论哪个进程登陆或者修改了相应信息,都要同步到另一个进程中去,这个时候怎么做呢? 第一种:一个进程里面的时候,经常采用SharePreference来做,但是SharePreference不支持多进程,它基于单个文件的,默认转载 2022-04-29 08:03:54 · 440 阅读 · 0 评论 -
adb shell settings 控制安卓系统设置
Android4.2的源码android-17\com\android\commands目录下较以前的版本多了一个settings命令,查看其中的SettingsCmd.java文件,末尾有命令的帮助信息:html1 private static void printUsage() {2 System.err.println("usage: settings [--user NUM] get namespace key");3 System.err.println转载 2022-04-29 07:46:39 · 2798 阅读 · 0 评论 -
Android adb 设置和获取系统属性
/system/build.prop 为系统属性默认值。安卓系统属性由特殊的property_service管理, /system/build.prop是只读文件,其中包含property_service在启动期间用于填充其内部内存数据库的默认值。因此,在运行时对文件的更改不会在重新引导之后传播。setprop和getprop命令用于访问该数据库中的数据.除非属性名称以persist开头. 属性值将存储在/data/property/persistent_properties文件中如转载 2022-04-29 07:34:24 · 4139 阅读 · 0 评论 -
面试:讲讲 Android 的事件分发机制
写在前面转眼间 面试系列 已经到了第九期了,由于文章将会持续更新,导致标题难看性,所以以后的标题将更正为本文类似的格式。好了,话不多说,还是直入主题吧。面试场景讲讲 Android 的事件分发机制?基本会遵从 Activity => ViewGroup => View 的顺序进行事件分发,然后通过调用 onTouchEvent() 方法进行事件的处理。我们在项目中一般会对 MotionEvent.ACTION_DOWN,MotionEvent.ACTION_UP,Moti转载 2022-04-23 21:37:01 · 1381 阅读 · 0 评论 -
Android之线程池的使用场景理解
线程池概念源于JDK1.5版本之后的Executor接口,通过ThreadPoolExceutor进行实现,而ThreadPoolExecutor继承于AbstractExecutorService,AbstractExecutorService 是ExecutorService的实现,ExecutorService继承了Executor接口.线程池的优点1,重用线程池中的线程,避免的频繁创建和销毁线程所带来的内存开销2,有效的控制最大的并发数,避免线程之前因抢占资源而阻塞3,简单管理线转载 2022-04-23 21:21:51 · 576 阅读 · 0 评论 -
【Android】广播的原理及实现步骤
发送方和接收方通过AMS(Activity Manager Service)来进行交互转载 2022-04-23 21:01:56 · 1244 阅读 · 0 评论 -
Android中Activity的startActivity和Context的startActivity有什么不同
在使用中的不同1.在Activity中跳转到其他的Activity时,两种使用方法是一样的:this.startActivity(intent);context.startActivity(intent);2.从非 Activity (例如从其他Context中)启动Activity则必须给intent设置Flag:FLAG_ACTIVITY_NEW_TASK:intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK) ; mContext.sta转载 2022-04-21 08:41:05 · 653 阅读 · 0 评论 -
android基础知识回顾--ContentProvider简单用法
一、相关ContentProvider概念解析:1、ContentProvider简介在Android官方指出的Android的数据存储方式总共有五种,分别是:Shared Preferences、网络存储、文件存储、外储存储、SQLite。但是我们知道一般这些存储都只是在单独的一个应用程序之中达到一个数据的共享,有时候我们需要操作其他应用程序的一些数据,例如我们需要操作系统里的媒体库、通讯录等,这时我们就可能通过ContentProvider来满足我们的需求了。2、为什么要选择ContentPr转载 2022-04-21 08:34:36 · 1348 阅读 · 0 评论 -
Android HandlerThread 总结使用
前言以前我在【Android Handler、Loop 的简单使用】介绍了子线程和子线程之间的通信。很明显的一点就是,我们要在子线程中调用Looper.prepare() 为一个线程开启一个消息循环,默认情况下Android中新诞生的线程是没有开启消息循环的。(主线程除外,主线程系统会自动为其创建Looper对象,开启消息循环。) Looper对象通过MessageQueue来存放消息和事件。一个线程只能有一个Looper,对应一个MessageQueue。 然后通过Looper.loop() ..转载 2022-04-21 08:07:46 · 579 阅读 · 0 评论 -
Android-HandlerThread
在外部线程并不能拿到匿名内部类线程对象的Looper。比如主线程,创建了一个Thread对象,并不能通过Thread对象获取到该Thread的Looper对象。而如果将Thread的Looper写全局对象,那么就存在耦合,并不会随着线程Thread的消失而消失。HandlerThread就是一个线程。在HandlerThread中的run方法中,自动帮我们完成了Looper.prepare和Looper.loop()。HandlerThread存在的意义主要是:方便初始化,方便取线程Looper对象转载 2022-04-21 08:03:06 · 484 阅读 · 0 评论 -
android四种更新UI的方法
// 使用handler.post(Runnable)更新UI public void updateUI_Fun1() { new Thread() { public void run() { Handler handler = new Handler(); handler.post(new Runnable() { @Override .转载 2022-04-21 08:00:05 · 1231 阅读 · 0 评论 -
Android的Context基本理解
Context是什么?Context:上下文,Context提供了关于应用环境全局信息的接口。它是一个抽象类,它的执行被Android系统所提供。可看做用户与操作系统操作的一个场景;Context在加载资源、启动Activity、获取系统服务、创建View等操作都要参与。类关系Context类本身是一个纯抽象类,它有两个具体的实现子类:ContextImpl和ContextWrapper。Application和Service继承ContextWrapper(子类ContextThem.转载 2022-04-20 00:16:49 · 2459 阅读 · 0 评论 -
Android中的context的学习理解
Android中Context的学习理解Context是一个抽象基类,通过它getResuources.getAssets and start 其他组件(Activity,Service,broadCast,getSystemService),可以这样理解:Context提供了一个运行环境for App, then app 可以访问资源,才能完成与其他组件,服务的交互,Context定义了一套基本的功能接口or一套规范...转载 2022-04-20 00:13:31 · 243 阅读 · 0 评论 -
Android 子线程更新UI的几种方法
1、Handler机制在子线程中通过下图两种方式将UI更新交给Handle来做。在我看来两种用法其实是一致的,没有什么区别,看个人喜好a. b.2、Handler.Posthandler.post(new Runnable(){undefined public void run(){undefined ......更新..... }});3、Looper通过Looper可将UI更新的代码写在线程中4、runUiThreadrunUiTh...转载 2022-04-19 23:46:28 · 3576 阅读 · 0 评论 -
Carson带你Android:这是一篇全面&详细的属性动画学习指南
前言属性动画的使用 是 Android 开发中常用的知识 本文将献上一份全面 & 详细的属性动画学习指南,将详细介绍属性动画的所有内容,包括:意义、作用、应用场景、功原理 & 具体使用等,希望你们会喜欢。目录1. 出现的意义Android一开始提供了视图动画,即补间动画跟逐帧动画。但视图动画存在三个问题:为了弥补视图动画的缺陷,于是Android在3.0(API 11)开始提供了一种全新的动画模式:属性动画(Property Animation)。2.转载 2022-04-19 23:34:38 · 251 阅读 · 0 评论 -
Bundle传递对象为什么需要序列化,Serialzable和Parcelable的区别
因为bundle传递数据时,只支持基本数据类型,所以在传递数据时,要将对象序列化转化成可以存储或者可以传输的本质状态,即字节流。序列化后的对象可以在网络,页面之间传递,也可以存储到本地。Serialzable(Java自带)序列化对象,转化成可以存储或者可以传输的本质状态。Parcelable(安卓专用)Parcelable可以实现相同的效果,但是不是将对象序列化,而是将对象进行分解,分解后的每一个部分,都是Intent所支持的数据类型,这就也实现了传递对象的功能了。比较:Serialz转载 2022-04-19 08:13:25 · 523 阅读 · 0 评论 -
Android进程优先级
在安卓系统中: 当系统内存不足时,Android系统将根据进程的优先级选择杀死一 些不太重要的进程,优先级低的先杀死。进程优先级从高到低如下。前台进程处于正在与用户交互的activity与前台activity绑定的service调用了startForeground()方法的service正在执行oncreate(),onstart(),ondestroy方法的 service。进程中包含正在执行onReceive()方法的BroadcastReceiver。系统中的前台进程并不会很多,而且一转载 2022-04-18 22:59:14 · 989 阅读 · 0 评论 -
AsyncTask原理及不足
AsyncTask理解:AsyncTask是Handler与线程池的封装。 网络请求等耗时操作在线程池中完成,通过handler发送给主线程完成UI更新。 使用线程池的主要原因是避免不必要的创建及销毁线程的开销。AsyncTask的不足:内存泄漏问题 AsyncTask对象必须在主线程中创建,这与内部sHandler有关,下面会解释。 AsyncTask对象的execute方法必须在主线程中调用。 一个AsyncTask对象只能调用一次execute方法Params:doInBackg转载 2022-04-18 22:55:19 · 441 阅读 · 0 评论 -
SystemUI之NavigationBar加载流程
前面介绍SystemUI启动流程中,有介绍到SystemBars的启动流程,其中NavigationBar属于SystemBars模块,今天与大家一同分析一下NavigationBar启动以及运行流程。初始化NavigationBar在Statusbar初始化的时候,即调用start()时进行初始化,代码如下:@Overridepublic void start() { ...... createAndAddWindows(); ......}public转载 2022-04-17 22:51:19 · 830 阅读 · 0 评论 -
Android 9.0 SystemUI 下拉状态栏快捷开关
SystemUI 下拉状态栏快捷开关是 QSPanel,qs_panel.xml,@+id/quick_settings_panel,本篇文章就来看看这些快捷开关是如何呈现的以及如何新增一个快捷开关?基于 AOSP 9.0 分析。SystemUI 下拉状态栏快捷开关QSPanel 创建是从 StatusBar#makeStatusBarView 开始的。StatusBar#makeStatusBarViewprotected void makeStatusBarView() { /转载 2022-04-17 22:34:46 · 2370 阅读 · 0 评论 -
Android9.0 SystemUI通知显示流程
系统会通过两个方法将通知上报给SystemUI的NotificationListener类:@Overridepublic void onListenerConnected() { if (DEBUG) Log.d(TAG, "onListenerConnected"); onPluginConnected(); final StatusBarNotification[] notifications = getActiveNotifications(); if (no转载 2022-04-17 22:20:11 · 950 阅读 · 0 评论 -
Android 9.0 SystemUI 启动流程
基于 AOSP 9.0 分析。开机流程开机大致会经历如下几个过程:uboot 在引导 os 启动,然后加载 kernel; 当 kernel 加载完成后,进入 init 进程,fork 出 zygote,然后由 zygote 去启动 SystemServer; SystemServer 会启动系统运行所需的众多核心服务和普通服务,以及初始化和加载一些应用; 之后就进入到锁屏或者 Launcher,开机过程就基本结束了。SystemUI 启动就是从 SystemServer 开始的。序转载 2022-04-17 22:00:19 · 905 阅读 · 0 评论 -
Android IMS原理解析之InputReader
Input事件获取前面讲到,在start()后会启动InputReaderThread线程不断的从EventHub中抽取原始输入事件并进行加工处理,InputReaderThread继承自C的Thread类,Thread类封装了pthread线程工具,提供了与java层Thread类相似的API。C的Thread类提供了一个名为threadLoop()的纯虚函数,当线程开始运行后,将会在内建的线程循环中不断地调用threadLoop(),直到此函数返回false,则退出线程...转载 2022-04-17 21:29:34 · 574 阅读 · 0 评论 -
触摸事件的传递过程
触摸事件的传递过程事件传递过程涉及的几个API如下:dispatchTouchEvent : 分发事件。如果返回true,表示事件分发下去后被处理了;返回false,则表示分发下去后没有被任何view处理。onInterceptTouchEvent :拦截事件。如果返回true,则表示拦截事件。如果返回false,则表示不拦截。这里拦截的是本来要传给子View的事件,所以这个方法是ViewGroup独有的。onTouchEvent : 处理事件。如果返回true,则表示处理事件,如果返回false转载 2022-04-17 21:00:53 · 320 阅读 · 0 评论 -
windows下载Android系统源码
1.安装 git官网:https://git-scm.com/downloads/2.安装 Python官网:https://www.python.org/downloads/3.下载源码1.下载manifest.git方法一:git clone https://android.googlesource.com/platform/manifest.git(需要梯子)方法二:git clone https://aosp.tuna.tsingh...转载 2022-04-12 22:59:47 · 1461 阅读 · 0 评论