![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
android开发
文章平均质量分 64
小迷糊171
不要假装很努力,结果不会陪演戏。
展开
-
架构学习路线
书到用时方恨少加油吧原创 2021-10-27 10:03:52 · 252 阅读 · 0 评论 -
选择、冒泡、插入排序 java
选择排序每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止。for(int i = 0; i<unsortArray.length; i++) { for(int j=i+1; j<unsortArray.length; j++) { if(unsortArray[i] > unsortArray[j]) { int temp = unsortArray[i]; unsortArray[i] = unsortArray[j];原创 2021-03-29 11:40:52 · 102 阅读 · 0 评论 -
百度面试凉经
2021.3.29 16:00-~ 参加了百度的面试,一下子三次面试,有些累。不过面试官都很nice,会提示你,而且问的话,把会的答出来就好了,像是约定好了,每次结束的时候会跟你说一句“辛苦了”。一面由于没有复习数据结构,所以一面表现不好。进程和线程HashMap说一下树的遍历(前中后,而不是深度和广度)把你所知道排序算法说一下(其中我还把 选择排序 说成了 快排)写一下冒泡排序(不会写)Handler二面staticstatic可以用在哪里?static是什么时候初始化的?原创 2021-03-29 09:23:16 · 212 阅读 · 0 评论 -
Android面试题
1、Binder使用时有什么限制吗?比如说大小之类的2、一个应用中的Binder数量有限制吗3、Android每次系统升级做了哪些改变原创 2021-03-09 21:00:37 · 64 阅读 · 0 评论 -
AIDL的思考——asInterface判断是否为同一个进程的依据+不同进程是怎么访问到asInterface方法的
看书《Android插件化开发指南》带来的思考1、asInterface判断是否为同一个进程的依据为什么要这么调用呢?比如说,AMS,为什么不能直接实例化AMS然后调用其StartActivity方法呢?在Android 10.0中Activity的启动流程https://www.jianshu.com/p/e654d2116837该文章中提到 “负责管理Acitivity的服务和Activity不在一个进程,所以不能直接调用ActivityManagerService,而是通过Bind.原创 2021-02-19 15:23:07 · 365 阅读 · 1 评论 -
Android四大组件之Activity(一)—— 启动过程综述
使用的是Android 7.1.2的源代码:https://pan.baidu.com/s/1XcVD68cC_2wKtm8jJkdNQAprzv感谢IT先森的系列博客:Android应用进程创建流程大揭秘Android四大组件之bindService源码实现详解Android四大组件之Activity启动流程源码实现详解概要Activity启动流程(一)发起端进程请求启动目标ActivityActivity启动流程(二)system_server进程处理启动Activity请求Ac原创 2021-02-15 16:38:00 · 271 阅读 · 2 评论 -
LeetCode 263——判断是否为丑数
丑数就是只包含质因数 2, 3, 5 的正整数https://leetcode-cn.com/problems/ugly-number/submissions/循环:class Solution { public boolean isUgly(int num) { if(num<1) return false; while(num % 2 == 0) num=num/2; while(num % 3 == 0) num=num/3;原创 2021-02-07 09:38:20 · 89 阅读 · 0 评论 -
AndroidStudio Log格式
https://www.cnblogs.com/andy-songwei/p/9676823.html原创 2021-02-04 11:22:00 · 263 阅读 · 0 评论 -
Android四大组件之Activity(六)——Zygote:针对新启动的Activity创建一个新的进程
一、Zygote Zygote含义为受精卵,是人的第一个细胞,其他细胞都是由其分裂出来的。对于Android来说,它是Android Java世界的第一个进程,其他所有Java进程都是由其fork出来的。 Android会利用Zygote进程然后通过fork机制克隆出一个和原来Zygote进程几乎完全相同的进程(此进程包继承Zygote进程相关的资源和财产),新进程不用再进行初始化操作,只需要修改一些关键参数就可以了,如上的逻辑极大地加快了新建进程的速度和资源的调度。总之一句话Zygo原创 2021-02-02 15:53:06 · 189 阅读 · 0 评论 -
Android四大组件之Activity(五)——AMS:针对新启动的Activity创建一个新的进程
1、使用的是Android 7.1.2的源代码:https://pan.baidu.com/s/1XcVD68cC_2wKtm8jJkdNQAprzv2、感谢IT先森的系列博客:Android应用进程创建流程大揭秘Android四大组件之bindService源码实现详解Android四大组件之Activity启动流程源码实现详解概要Activity启动流程(一)发起端进程请求启动目标ActivityActivity启动流程(二)system_server进程处理启动Activity请原创 2021-02-02 15:52:27 · 495 阅读 · 0 评论 -
Android四大组件之Activity(八)——新创建的进程:Activity组件和新创建的进程相关联
目标Activity所属的应用进程已经创建好了,接下来包括如下流程:注册目标Activity所属进程到system_server目标Activity所属进程创建Application实例对象一、注册(attach)目标Activity进程到system_server1、ActivityThread.main调用attach,向system_server发起一个绑定操作,告诉AMS进程启动完毕,可以进行其他事情了初始化应用进程的主线程的Looper,并开启loop消息循环public s原创 2021-02-02 15:51:39 · 560 阅读 · 0 评论 -
Android四大组件之Activity(七)——新创建的进程Android Context
1、Context的使用场景启动Activity(startActivityXXX(…)方法族)启动/停止Service(startServiceXXX(…)/stopServiceXXX(…)方法族)绑定/解绑Service(bindServiceXXX(…)/unbindService(…)方法族)发送广播(sendBroadcastXXX(…)/sendOrderedBroadcastXXX(…)方法族)注册/注销广播(registerReceiverXXX(…)/unregisterRe原创 2021-02-02 15:51:11 · 147 阅读 · 0 评论 -
Android四大组件之Activity(九)—— 执行Activity生命周期
一、AMS进程AMS.attachApplicationLocked 执行完 thread.bindApplication 之后,接着执行6,即检查有没有四大组件等待在该进程中运行,如果有,继续执行四大组件。不过,这里只有Activity、Service和BroadCastReceiver三种组件,ContentProvider的发布会在bindApplication的时候进行。这里我们只关注Activity的启动。1、AMS.attachApplicationLocked // [AMS] p原创 2021-02-02 15:49:52 · 253 阅读 · 0 评论 -
Android四大组件之Activity(四)—— 启动模式(launchMode) + Pause上一个Activity
1、使用的是Android 7.1.2的源代码:https://pan.baidu.com/s/1XcVD68cC_2wKtm8jJkdNQAprzv2、感谢IT先森的系列博客:Android应用进程创建流程大揭秘Android四大组件之bindService源码实现详解Android四大组件之Activity启动流程源码实现详解概要Activity启动流程(一)发起端进程请求启动目标ActivityActivity启动流程(二)system_server进程处理启动Activity请原创 2021-01-24 20:57:40 · 1976 阅读 · 0 评论 -
Android四大组件之Activity(二)—— Component属性、显式隐式Intent
1、使用的是Android 7.1.2的源代码:https://pan.baidu.com/s/1XcVD68cC_2wKtm8jJkdNQAprzv2、感谢IT先森的系列博客:Android应用进程创建流程大揭秘Android四大组件之bindService源码实现详解Android四大组件之Activity启动流程源码实现详解概要Activity启动流程(一)发起端进程请求启动目标ActivityActivity启动流程(二)system_server进程处理启动Activity请原创 2021-01-24 19:41:30 · 1172 阅读 · 0 评论 -
Android四大组件之Activity(三)—— Activity启动中涉及到的重要的数据结构,ActivityRecord等
1、使用的是Android 7.1.2的源代码:https://pan.baidu.com/s/1XcVD68cC_2wKtm8jJkdNQAprzv2、感谢IT先森的系列博客:Android应用进程创建流程大揭秘Android四大组件之bindService源码实现详解Android四大组件之Activity启动流程源码实现详解概要Activity启动流程(一)发起端进程请求启动目标ActivityActivity启动流程(二)system_server进程处理启动Activity请原创 2021-01-24 19:39:28 · 1390 阅读 · 1 评论 -
Android中URI
一、Uri简介URI(Universal Resource Identifier)通用资源标识符Uri代表要操作的数据,Android里面的每种可用的资源,包括图像、视频、联系人等都可以用Uri来表示。二、Uri组成Uri的组成一般有三部分组成:访问资源的命名机制、存放资源的主机名、资源自身的名称例如解释:https://blog.csdn.net/qq_12345/article/details/7777777例如,所有联系人的Uri:content://contacts/people原创 2021-01-12 14:16:27 · 8548 阅读 · 0 评论 -
Android多线程编程
《第一行代码》方式一:继承Thread新建一个类继承自Thread,然后重写父类的run()方法,并在里面编写耗时逻辑class MyThread extends Thread{ @Override public void run(){ //处理具体的逻辑 }}启动此线程:new MyThread().start();这样run()方法中的代码就会在子线程当中运行了。缺点:使用继承的方式耦合性有点高,更多时候选择使用实现Runnable接口的方式来定义一个线程。方式二:实.原创 2021-01-06 20:01:13 · 113 阅读 · 0 评论 -
Android开发之分享功能整理
1、在自己的APP内部分享文本、图片等到外部可供分享的应用中主要代码:MainActivity.java,此界面只有一个按钮public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVie原创 2021-01-05 18:03:14 · 696 阅读 · 0 评论 -
反射的妙处
Android解析ActivityManagerService(一)AMS启动流程和AMS家族代码1:frameworks/base/services/java/com/android/server/SystemServer.java:private void startBootstrapServices() { Installer installer = mSystemServiceManager.startService(Installer.class); // Ac原创 2021-01-02 00:44:40 · 149 阅读 · 0 评论 -
Android Uri 转Path
点击选择相册中的视频,获取所有本地视频文件。点击获取相册中的视频是正常的,但是获取文件管理中的视频时,会出现根据Uri找不到存储路径的问题。在Android Uri 转 Path的过程中,发现在查询文件管理中的视频时,通过Uri查询系统媒体库得到的存储路径为null,但是可以通过拼接的方式来得到存储路径。private static String getMediaPathFromUri(Context context, Uri uri, String selection, String[] select原创 2020-12-30 17:00:35 · 1277 阅读 · 0 评论 -
AndroidManifest的Activity的属性taskAffinity
背景:在做公司项目插件化的过程中,在Activity01跳转到Activity02,从Activity02跳转到微信的LauncherUI界面,模拟点击后,再跳转到Activity02,但是在Activity02点击返回按钮,返回的是LauncherUI界面而不是Activity02界面。(其中Activity01和Activity02是自己写的界面)解决bug:在AndroidManifest给Activity02添加属性 android:taskAffinity="${taskAffinity}".原创 2020-12-30 14:29:56 · 446 阅读 · 0 评论 -
Intent.createChooser方法源码解析(按我的解析,只有一个Intent是不会启动的??Android源码7.1.2)
用法:intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);Intent chooserIntent = Intent.createChooser(intent, "分享到:");VActivityManager.get().startActivity(chooserIntent, 0);来看下源码: public static Intent createChooser(Intent target, CharSequence title)原创 2020-12-16 23:52:07 · 963 阅读 · 0 评论 -
Android开发———查看Sqlite存储在手机中的数据库
下载安装Android Studio的Database Navigator一直出错,如下图,我搜索了好长时间也没解决,最后下载了个其他的数据库查看器:Navicat Premium 15数据库文件需要从Android Studio的Device FileExplorer中的data/data/packageName/databases/your_db_name,然后右键SaveAs,保存之后,打开Navicat Premium 15,点击Connection->SQLite,在General选项卡原创 2020-12-15 15:01:56 · 635 阅读 · 0 评论 -
java基础知识---看源码时关于父类和子类的粗心地方
public class Father { public Father() { funcA(); } public void funcA() { System.out.println("Father::funcA()"); }}public class Son extends Father{ public Son() { super(); } public void funcA() { System.out.println("Son::funcA()");原创 2020-12-13 16:40:45 · 87 阅读 · 2 评论 -
Android进程学习笔记
从内核角度看,进程由用户内存空间和一系列内核数据结构组成,其中用户内存空间包含了程序代码及代码所使用的的变量,而内核数据结构则用于维护进程状态信息。图1 进程内存布局上图中灰色区域表示这些范围在进程虚拟地址空间中不可用。逻辑上将一个进程划分为以下几部分(也称为段):文本:程序的机器语言指令。文本段具有只读属性,以防止进程通过错误指针意外修改自身指令。因为多个进程可同时运行同一程序,所以又将文本段设为可共享数据:程序使用的静态变量。当程序加载到内存时,从可执行文件中读取这些变量的值。未初始化数据原创 2020-10-28 10:10:08 · 283 阅读 · 0 评论 -
VirtualApp跑不起来
重新下载一个ndk,然后在File->Project Structure->SDK Location->Android NDK Location中指定位置就可以了。但是现在NDK下不下来啊,昨天从网盘里找了一个r11的,但还是跑不起来,但是r17的可以,放上地址:链接:https://pan.baidu.com/s/1x5jIzjpMWA6bCLwng3dWIg提取码:ggap...原创 2020-10-16 08:39:34 · 286 阅读 · 0 评论 -
RecyclerView的全选出现错误:item显示在屏幕中才会选上,即滑动完所有的数据项才会自动把item都给选上
出错的原因在于我把全选的逻辑写在了onBindViewHolder中,根据position得到每一个item设置一个选中的属性。实际上全选逻辑应该写在外面,循环判断所有传入到adapter中的list数据,然后设置选中的属性。 for (int i=0;i<mContactList.size();i++){ ContactInfoBean bean=mContactList.get(i); mSelectMap.put(bean.getContact_id(),tru原创 2020-10-10 12:58:54 · 630 阅读 · 0 评论 -
在RecyclerView的末尾添加一个固定按钮
目的是在RecyclerView的末尾添加一个固定的增加图标的按钮Btn222,点击之后会在这个固定按钮Btn222的前部动态地增加图标。参考自:http://www.6tie.net/p/1174233.html使用ListView有一个方法addFooterView(),如何使用RecylerView做同样的事情?一、RecyclerView基本用法RecyclerView在support库中,所以要想使用RecyclerView这个控件,首先需要在项目的build.gradle中添加相应的.原创 2020-08-16 13:05:47 · 2983 阅读 · 0 评论 -
Parcelable
在代码中implements Parcelable的作用是什么呢??Android开发,无法将对象的引用传递给Activity或Fragment,需要将对象放到Intent或者Bundle里,然后再传递。即,将对象转换为可传输的二进制流的过程从而进行传输数据,即序列化的过程。Parcelable是Android为我们提供的序列化的接口,Parcelable相对于Serializable的使用较为复杂一些,但是Parcelable的效率也相对较高。对比Parcelable vs Serializabl.原创 2020-08-12 11:43:46 · 142 阅读 · 0 评论 -
自定义View报错:InflateException: Binary XML file line #29: Binary XML file line #29: Error inflating
将构造函数改为 super(context, attributeSet);含有两个参数的形式的原创 2020-08-11 19:20:41 · 281 阅读 · 0 评论 -
Java之Set集合
想要从Set中取值时,创建Set的iteratorSet<Object> set = new HashSet<Object>();Iterator<Object> it = set.iterator();while(it.hasNext()) //判断是否有下一个it.next() //取出元素Set和HashSet的关系Set是接口,用来定义一个集合,HashSet是Set的一个实现类(Set的实现类还有TreeSet、EnumSet)HashSet原创 2020-08-10 16:06:26 · 1516 阅读 · 0 评论 -
Received close_notify during handshake 错误解决
1、翻译过来的意思是 :握手时收到关闭通知。如图:因为Android studio 在编译工程的build.gradle时 ,Jcenter里面的数据无法下载,(注:我的报这个错误可能是公司对访问的网络有权限,所以无法访问jcenter的数据)解决:打开工程的build.gradle文件 ,把buildscript和allprojects中的Jcenter 替换成阿里云的就可以了。如图: maven{ url'http://maven.aliyun.com/nexus/content/groups转载 2020-08-10 09:54:06 · 3113 阅读 · 0 评论 -
Android第三方应用跳转到qq群聊资料页面
参考自:https://www.jianshu.com/p/e9d2eca92fba在跳转到QQ群页面前,需要先获取要跳转到QQ群的Key,获取Key的网址:https://qun.qq.com/join.html使用自己的QQ号登陆,即可看到QQ群对应的key和相应的代码。原创 2020-08-06 19:55:55 · 1753 阅读 · 0 评论 -
保存Switch的状态
转载自:https://www.it1352.com/154405.html重点在代码I am using switch (like android togglebutton ) instead of normal buttons in my android app. The code works fine while enabling and disabling switches. But i want to store the state of the switch. Suppose i ena转载 2020-07-28 18:39:49 · 617 阅读 · 0 评论 -
SpannableStringBuilder
SpannableString、SpannableStringBuilder、String的基本作用都是用来存储字符串,但是SpannableString、SpannableStringBuilder的setSpan()函数可以给这些存储的字符串添加各种格式或者样式(Span),将原来的String以不同的样式展示出来,比如在原来String上加下划线、加背景色、改变字体颜色、用图片把指定的文字给替换掉,等等。SpannableString与SpannableStringBuilderSpannable转载 2020-07-27 09:58:13 · 494 阅读 · 0 评论 -
Dialog设置圆角无效
自己写了一个通用的Dialog,但是在drawable中设置的圆角一直不起作用。后来找到一篇博客,解决了问题 https://blog.csdn.net/denglusha737/article/details/63255577public class CommonDialog extends Dialog{ private TextView tvTitle; private TextView tvContent; private TextView tvSure; pr.原创 2020-07-25 14:00:17 · 1316 阅读 · 0 评论 -
Android沙箱目录
一.getCacheDir、getCacheDirgetCacheDir()方法用于获取/data/data//cache目录getFilesDir()方法用于获取/data/data//files目录二.getExternalFilesDir、getExternalCacheDir应用程序在运行的过程中如果需要向手机上保存数据,一般是把数据保存在SDcard中的。大部分应用是直接在SDCard的根目录下创建一个文件夹,然后把数据保存在该文件夹中。这样当该应用被卸载后,这些数据还保留在SDCard中转载 2020-07-24 19:46:26 · 6370 阅读 · 0 评论 -
广播broadcast的基本使用
Android中的广播主要可以分为两种类型:标准广播和有序广播标准广播:完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会在同一时刻接收到这条广播消息,没有先后顺序可分。发出一条广播广播接收器1广播接收器2广播接收器3有序广播:同步执行的广播,在广播发出后,同一时刻只会有一个广播接收器能够收到这条广播消息,当这个广播接收器中的逻辑执行完毕后,广播才会继续传递。此时的广播接收器是有先后顺序的,优先级高的广播接收器就先收到广播消息,并且前面的广播接收器还可以拦截正在传递的广播,这样后面的广播接收原创 2020-07-21 21:03:53 · 858 阅读 · 0 评论 -
SharedPreferences的基本使用
SharedPreferences是使用键值对来存储数据的一、将数据存储到SharedPreferences中得到SharedPreferences对象(这里有三种方法)1、Context类中的getSharedPreferences()方法参数:两个参数。①SharedPreferences文件的名称。用于指定SharedPreferences文件的名称,如果指定的文件不存在则会创建一个,SharedPreferences文件都是存放在/data/data//shared_prefs/目录下面;原创 2020-07-21 14:48:15 · 714 阅读 · 1 评论