- 博客(25)
- 资源 (1)
- 收藏
- 关注
原创 Runtime Permission授权流程
在Android系统中,权限管理是一个复杂的过程,涉及到多个系统服务和数据结构。以下是结合系统源代码详细解释运行时权限请求和管理的过程:权限管理涉及到的关键数据结构包括:ContextCompat.checkSelfPermission():检查应用程序是否拥有特定权限。ActivityCompat.requestPermissions():动态请求用户授权。onRequestPermissionsResult():应用程序的回调方法,用于接收权限请求的结果。PackageManager:系统服务,用于安装
2025-03-30 12:21:05
417
原创 Binder---Binder IPC实现原理
Binder,Android系统IPC机制的一种。Android APP的四大组件之间所涉及的进程间通信底层基本都依赖于Binder IPC机制。此外,在整个Android系统的架构中,也有大量采用Binder IPC机制的方案。Android系统除了Binder之外,还有哪些其他IPC机制各IPC机制之间的优劣对比。
2025-03-27 22:46:48
827
原创 PKMS系列---apk卸载流程
无论是通过PackageManager还是PackageInstall去卸载APK,最终都是调用到PKMS的deletePackageVersioned该方法传入参数四个参数,VersionedPackage: 包含要删除APK的包名信息IPackageDeleteObserver2: 删除的结果回调userId: Caller的user iddeleteFlags: 删除的flag,代表卸载时的行为。0是默认最简单调用。
2025-03-26 08:00:00
1647
原创 遥控器组合键OK+BACK抓取BugReport异常解析
现象:AndroidTV设备,多款遥控器中A款遥控器OK+BACK未能触发抓取Bugreport机制,其它款遥控器没有问题。
2025-03-25 00:43:02
877
原创 Android为什么子线程不能更新UI(一) ?
其实如果熟悉Activity启动流程很容易追溯,在ActivityThread.handleResumeActivity中调用了WindowManagerGlobal#addView,而且 ActivityThread 所在线程正是应用主线程。按照这个写法,实测onCreate和onResume中的更新UI动作不会有问题,只有在Button中开启的子线程更新UI会报错。但是细心的同学又会发现,有时候在子线程中更新UI又没有问题,这是怎么一回事?综上所述,即可得到在子线程中不可更新UI的结论。
2025-03-21 00:46:35
918
原创 Ubuntu给AndroidStudio软件添加桌面快捷方式图标
3. 第一次双击桌面上的android-studio.desktop文件,点击trust and launcher,这就OK了。2. 将android-studio.desktop文件复制到桌面, 并赋予可执行权限。比如给AndroidStudio添加快捷方式。Name: 快捷方式图标的名字。Icon: 图标的背景图片。Exec: 执行路径。
2022-11-10 00:05:51
2439
原创 Ubuntu18.04图标显示实时网速
点击图标-> Preference->General->勾选 Run on StartUp, 开机启动。点击图标-> Preference->Advanced->点击Net,,点击Sava保存。如果安装不成功,先更新下源,然后再执行安装命令。后台打开,打开之后可以看到电脑上面出现显示图标。此时即可实时显示网速。
2022-11-07 23:02:30
516
原创 数据存储方案(二)-SQLite数据库存储
构造方法中接收4个参数新建一个DatabaseTest项目创建一个名为BookStore.db的数据库,然后在这个数据库中新建一张Book表,表中有id(主键)、作者、价格、页数和书名等列。创建数据库表需要用建表语句,Book建表语句SQLite不像其他的数据库拥有众多繁杂的数据类型,它的数据类型很简单,integer表示整型,real表示浮点型,text表示文本类型,blob表示二进制类型。在onCreate()方法中调用了SQLiteDatabase的修改。...
2022-07-18 17:31:06
1132
原创 运行时权限-动态申请
运行时权限也称为危险权限,此类权限授予应用对受限数据的额外访问权限,并允许应用执行对系统和其他应用具有更严重影响的受限操作。因此,您需要先在应用中,然后才能访问受限数据或执行受限操作。当应用请求运行时权限时,系统会显示运行时权限提示。在Android官方网站中可以找到运行时权限,系统会为运行时权限分配“dangerous”保护级别许多运行时权限会访问私有用户数据,这是一种特殊的受限数据,其中包含可能比较敏感的信息。例如,位置信息和联系信息就属于私有用户数。...
2022-07-18 12:10:17
1577
原创 Android-Service-服务的基本用法
Android Service:服务的基本用法 onBinder():是Service中唯一一个抽象方法,必须在子类实现。 onCreate(): 服务创建的时候调用 onStartCommand(): 服务启动的时候调用 onDestroy():服务销毁的时候调用此外还需要在 And......
2022-06-23 10:34:09
1218
原创 Java I/O流
File 类import java.io.File;import java.io.IOException;public class FileTest { public static void main(String[] args) throws IOException { // 创建文件类型的对象,并与"D:\\Android\\a.txt"文件关联 File file = new File("D:\\Android\\a.txt"); if
2022-05-31 23:08:35
215
原创 Java-继承
类、超类、子类定义子类extendsJava中的所有继承都是公共继承,没有私有继承和保护继承public class ClassB extends ClassA子类比父类有更多的功能、封装了更多的数据。覆盖方法override子类中可以增加字段、增加方法或者覆盖超类的方法,但不可以删除字段和方法。构造器super(para1, para2, ...);使用super调用构造器的语句必须是子类构造器的第一条语句如果子类的构造器没有显示调用超类的构造器,将自动调用超类的无参数构造器。
2022-05-12 15:37:21
242
原创 Android-UI开发(二)
创建自定义控件常用控件和布局的继承结构View是Android中最基本的一种UI组件,它可以在屏幕上绘制一块矩形区域,并能响应这块区域的各种事件,因此,我们使用的各种控件其实就是在View的基础上又添加了各自特有的功能。而ViewGroup则是一种特殊的View,它可以包含很多子View和子ViewGroup,是一个用于放置控件和布局的容器所有控件都是直接或间接继承自View的,所有布局都是直接或间接继承自ViewGroup的当系统自带的控件并不能满足我们的需求时,可以利用上面的继承结构来创
2022-05-04 00:39:02
551
原创 vi/vim基本命令
启动和退出启动vi 打开vivim 打开vimvi/vim filename 打开文件保存、退出等指令:w 保存:w! 若文件属性为只读时,强制写入该文件。不过,到底能不能写入,还是跟你对该文件的文件权限有关:q 退出:q! 不保存强制退出:wq 保存退出:x 保存退出,等同于:wq:wq! 强制保存退出ZZ 若文件没有更动,则不保存离开,若文件已经被更动过,则保存后离开:w filename 另存为,将数据内容存成另一个文件:r filename 将filename这个文件
2022-04-29 23:43:07
1089
原创 Android-UI开发(一)
常用控件TextView它主要用于在界面上显示一段文本信息<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+i.
2022-04-10 20:23:45
3184
原创 Android-Activity(四)启动模式
启动模式一共有4种,分别是standard、singleTop、singleTask和singleInstance,可以在AndroidManifest.xml中通过给<activity>标签指定android:launchMode属性来选择启动模式。standardstandard是Activity默认的启动模式,在不进行显式指定的情况下,所有Activity都会自动使用这种启动模式。在standard模式下,每当启动一个新的Activity,它就会在返回栈中入栈,并处于栈顶的位置。对于.
2022-04-07 00:40:22
2511
原创 Android-Activity(三)生命周期
返回栈Android使用任务(Task)来管理活动,一个任务就是一组存放在栈里的Activity的集合,这个栈也称返回栈(Back Stack)。默认情况下,每当启动衣一个新的活动时,他会在返回栈入栈并处于栈顶的位置每当按下返回键或者调用finish()方法销毁一个活动时,栈顶的活动会出栈,前一个入栈的活动会重新处于栈顶的位置系统总是会将栈顶的活动显示给用户活动状态运行状态Running:活动位于栈顶时,就处于运行状态。暂停状态Paused:当活动不再处于栈顶但仍然可见时,就进入了暂停.
2022-04-05 21:03:56
2040
原创 Android-Activity(二)传递数据
向下一个活动传递数据Intent可以在启动活动时传递数据。Intent提供的putExtra()方法及其一系列重载,可以把数据暂存在Intent中,启动了另外一个活动后,只需要把这些数据再从Intent中取出即可。比如,将FirstActivity中的一个字符串传递到SecondActivity中,putExtra(para1, para2) 第一个参数是键,用于后面将数据从Intent中取出来;第二个参数是值,是要传递的数据。button1.setOnClickListener(new View.On
2022-03-29 16:57:13
1932
原创 Android-Activity(一)启动活动
什么是ActivityActivity是一种包含用户界面的应用程序组件,主要用于和用户进行交互。基本用法创建一个Activityapp -> java -> package -> FirstActivitypublic class FirstActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(sa
2022-03-29 00:47:38
2480
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人