android
文章平均质量分 90
mashanshui
耐得住寂寞,守得了繁华
展开
-
抖音 Android 性能优化系列:启动优化实践
启动是指用户从点击 icon 到看到页面首帧的整个过程,启动优化的目标就是减少这一过程的耗时。启动过程比较复杂,在进程与线程维度,它涉及到多次跨进程的通信与多个线程之间的切换;在耗时成因维度,它包括 CPU、CPU 调度、IO、锁等待等多类耗时。虽然启动过程比较复杂,但是我们最终可以把它抽象成主线程的一个线性过程。因此对于启动性能的优化,就是去缩短主线程的这个线性过程。接下来,我们将按照主线程直接优化、后台线程间接优化、全局优化。转载 2022-12-30 15:24:28 · 977 阅读 · 0 评论 -
Android软键盘windowSoftInputMode的使用与原理(使用篇)
看了网上很多文章都没有很准确的说明windowSoftInputMode的几种模式的作用,而且大部分文章只是分析了一下如何使用并没有深入源码去分析原理,今天这篇文章就来分析一下Android软键盘windowSoftInputMode的各个模式的作用和原理,文章一共分为两篇,一是使用篇,二是原理篇,下面开始使用篇的讲解。如上,windowSoftInputMode有六个stateXXX的值和三个adjustXXX的值。原创 2022-08-25 14:27:59 · 9376 阅读 · 1 评论 -
fragment懒加载的前世与今生
文章目录前言为什么要对Fragment做延迟加载?延时加载的方法1.setUserVisibleHint2.onHiddenChanged3.setMaxLifecycle1.不设置setMaxLifecycle2.setMaxLifecycle为CREATED3.setMaxLifecycle为STARTED4.setMaxLifecycle为RESUMED5.具体实现4.ViewPager2总结前言Fragment懒加载是android开发中一个常见的问题,网上也有很多关于懒加载的文章,而我写这篇博原创 2020-06-17 08:30:36 · 1468 阅读 · 0 评论 -
Android10.0通知Notification的使用这一篇就够了
文章目录前言通知概述不同android版本上通知功能通知的结构创建通知1.创建渠道2.设置点击事件3.构造Notification对象并显示通知通知的操作通知渠道通知的级别前言最近一段时间写的都是android源码的文章,前几天在公司做了一个需求是关于前台服务的,在写前台服务的时候深入使用到了通知,今天就先写一篇文章总结一下通知的相关内容,后面有时间了在介绍一下前台服务的相关内容。通知概述...原创 2020-04-24 14:19:45 · 47219 阅读 · 18 评论 -
如何在 onCreate 中拿到 View 的宽度和高度?
文章目录前言原因getMeasuredWidthgetWidth分析方法1. View.post()2. IdleHandler3. ViewTreeObserver前言这篇文章会讲在 onCreate 中通过getWidth()和getMeasuredWidth()拿不到 View 的宽度和高度的原因,以及如何拿到的三种方法。如果想了解原理,建议在看这篇文章之前先看一下这篇文章Androi...原创 2020-03-30 14:21:04 · 1589 阅读 · 0 评论 -
Android换肤总结
文章目录换肤方案Theme换肤Resouce换肤UiModeManager换肤总结换肤方案据我所知目前Android换肤有两种类型,静态换肤和动态换肤;静态换肤就是将所有的皮肤方案放到项目中,而动态换肤则就是从网络加载皮肤包动态切换;通常静态换肤是通过Theme实现,通过在项目中定义多套主题,使用setTheme方法切换的方式实现换肤;动态换肤是通过替换系统的Resouce动态加载下载到本...原创 2020-03-19 14:43:46 · 3491 阅读 · 1 评论 -
Android中常见的内存泄露及解决方法(持续更新)
内存泄露的原因内存泄露是指不在需要的对象仍然被引用不能被GC回收释放,这句话你可能看到过不止一遍了,下面我们来深入研究一下这句话。 首先了解一下两个名词:GC: 垃圾回收器,会自动回收不在被引用的内存数据GC Roots:不能被回收的对象(这里的解释不是很好,往下看就明白了)下面我们来看一张图: GC Roots持有的对象都不能被垃圾回收器回收,所以这里的Object D...原创 2018-09-01 17:46:46 · 1133 阅读 · 0 评论 -
使用CoordinatorLayout实现炫酷的效果
在android5.0的时候添加CoordinatorLayout、AppBarLayout、Toolbar、CollapsingToolbarLayout等等一系列的新控件,他们组合在一起可以实现很多非常nice的效果,目前国内很多app都使用了这些效果,下面我们来逐一介绍这些控件。CoordinatorLayout又名协调者布局,它是support.design包中的控件,所以使用的时候要...原创 2018-12-20 15:10:34 · 20028 阅读 · 6 评论 -
关于mvp view被销毁后present回调view造成的空指针问题
当我们在使用 MVP 的时候(应该其他场景也有这种情况),我们在请求网络的时候,网络还没返回,这个时候View 被销毁了,那么 View 为 Null,这个时候去调用 View 的方法,就会造成空指针异常,一般来说,我们可以在销毁的时候进行cancel请求,但是也有可能没有被cancel,在这种情况下,我们可以用判空的方法来进行处理,比如: if (view != ...原创 2018-12-24 10:46:15 · 2031 阅读 · 0 评论 -
Android状态栏详解(全网最详)
啊原创 2019-02-22 17:41:44 · 25112 阅读 · 10 评论 -
android安装包极致优化
1.矢量图原创 2019-03-18 13:45:18 · 1520 阅读 · 0 评论 -
android主流屏幕适配方案总结
1.概述android的碎片化导致了很多问题,屏幕适配算是其中比较头疼的一个问题了,想想你见过的安卓手机的尺寸和比例有多少种,本来应该说手机屏幕大就应该显示更多的内容,但是机型那么多,想要控制所有手机的显示效果是不现实的,所以只能是让页面在所有手机上尽可能的一致,也就是大屏幕拉伸,小屏幕缩放。Android适配最核心的问题有两个,其一,就是适配的效率,即把设计图转化为App界面的过程是否高效,...原创 2019-03-13 14:38:49 · 2927 阅读 · 0 评论 -
Android——谷歌cameraview详解
Android的camera开发是经常能接触到的,但是由于多次迭代,camera的适配是一个很烦的事情,偶然的机会在github上看到google的一个关于camera的demo,这个demo兼容了各个版本的Android系统,谷歌出品必属精品。这篇文章就来研究一下这个demo。github地址这篇文章针对两类人,一类是想要直接使用camera,尽量快的完成开发,不关心内部原理的人;另一类就是...原创 2019-05-20 15:15:45 · 12657 阅读 · 3 评论 -
android热更新之Bugly
有一段时间没有更新博客了,主要是快毕业了,出来实习找工作,现在在一家公司做安卓,今天是上班的第三天,前两天了解了一下项目,现在项目需要增加热更新方案,于是我研究了一下市场上的开源方案,今天注重讲一下腾讯的bugly。(本文只是对bugly的大致流程进行梳理,并对一些常见的错误进行解释,适合看过bugly官方文档但是没有集成成功的人) 首先说一下市场上常见的几种开源方案:Tinker、 Qzone、原创 2017-11-27 17:49:17 · 962 阅读 · 0 评论 -
android中dp和px的关系
关于android的dp和px的关系是我刚开始学习android的第一个知识点,不知不觉学安卓也有一年了,但是偶然间我发现我理解的dp和px的关系一直是错的,真的是有一点搞笑,今天特意写一篇博客纪念一下这个我理解错一年的知识点。 dp和px之间又有一个dpi作为桥梁,我们分别看看这三个属性:px:像素点,比如1080*1920的屏幕,就是宽1080个像素点和高1920个像素点。dpi(也叫pp原创 2017-12-08 18:12:02 · 22101 阅读 · 5 评论 -
android中反射的应用
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 然而在android中Google很多的类的某些方法不让第三方应用去调用,通过java反射机制能把这些隐藏方法获取出来并调用,三方应用上我们就很方便的去用这些方法。 我们以android中获取原创 2017-02-13 15:48:18 · 2227 阅读 · 0 评论 -
android Service和Activity的通信
android Service和Activity的通信大致有三种方法: + 通过Binder对象 + 通过回调方法 + 通过广播我们通过在service中下载通知activity进度的例子说明。一、通过Binder对象 首先在service中写一个方法 public int getProgress() { return progress; } 用于在acti原创 2017-02-02 18:40:25 · 1107 阅读 · 0 评论 -
android ViewDragHelper略解
下面是创建ViewDragHelper 的基本构造:public class HelpLayout extends LinearLayout { private ViewDragHelper dragHelper; public HelpLayout(Context context, AttributeSet attrs) { super(context, attrs);原创 2017-02-15 15:19:06 · 313 阅读 · 0 评论 -
AIDL——跨应用启动service
跨应用启动服务:在android5.0之前,想要开启其他应用的服务可以通过Intent设置服务的Action来隐式启动服务,但是在5.0之后,想要启动其他应用的服务只能通过Intent的显示启动来实现,如下:Intent intent=new Intent();intent.setComponent(new ComponentName("com.example.administrator.coolw原创 2017-02-26 18:29:21 · 1726 阅读 · 0 评论 -
android——DrawerLayout
我们通过一个完整的例子来学习DrawerLayout。 先来看一下这个例子的效果: 首先创建一个项目,在activity_main中加入一下代码:<?xml version="1.0" encoding="utf-8"?><android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com原创 2017-05-01 18:34:27 · 398 阅读 · 0 评论 -
android——自定义view基础
1.构造函数构造函数是View的入口,可以用于初始化一些的内容,和获取自定义属性。View的构造函数有四种重载分别如下:public void SloopView(Context context) {}public void SloopView(Context context, AttributeSet attrs) {}public void SloopView(Context context原创 2017-04-23 16:15:45 · 285 阅读 · 0 评论 -
Android基本功之debug调试
对于一个开发者来说找bug是一件很痛苦但是必须要做的事情,既然必须要做那就尽量找一些方法让他变得简单。今天我们来讲一下Android Studio里的程序调试。首先贴出来这次调试使用的代码:public class MainActivity extends AppCompatActivity { private String s="s"; @Override protected原创 2017-06-21 17:49:41 · 882 阅读 · 0 评论 -
Android开发——ViewPage与TabLayout和BottomNavigationView
本篇文章是接上一篇文章 Android开发——ViewPage的使用,使用了其中的例子。谷歌设计TabLayout的本意是用来实现顶部菜单的,但是也可以作为底部菜单来使用,而BottomNavigationView基本上只能用来作为底部菜单使用。本篇文章就是介绍ViewPage和这两种控件的组合使用。一、ViewPage和TabLayout1.TabLayout作为顶部菜单在上一篇文章中我们使用fr原创 2017-07-13 11:01:44 · 4081 阅读 · 0 评论 -
Android开发——ViewPage的使用
**(注:本篇文章的例子使用的是ConstraintLayout布局方式) ViewPage有两种使用方式,一是直接加载布局文件(使用PagerAdapter),二是加载fragment(使用FragmentPagerAdapter)。** 效果图: 一、直接加载布局文件1.在主布局中加入ViewPage<?xml version="1.0" encoding="utf-8"?><andro原创 2017-07-11 14:25:52 · 953 阅读 · 0 评论 -
Android——Activity启动模式详解
Activity启动模式是android中比较基础的知识,但是我一直没怎么细看过它,好像也没怎么用到过它,不管怎么说这也算是学习android必备的知识,今天写一篇文章详细研究一下这个知识点。Activity启动方式有四种,分别是: standard singleTop singleTask singleInstance可以根据实际的需求为Activity设置对应的启动模式,从而可以避免创建原创 2017-05-18 21:37:31 · 1057 阅读 · 0 评论 -
Android 一起来看看 7.0 的新特性 FileProvider
在Android7.0中为了提高私有文件的安全性,面向 Android N 或更高版本的应用私有目录将被限制访问。 对于面向 Android 7.0 的应用,Android 框架执行的 StrictMode API 政策禁止在应用外部公开 file:// URI , 如果一项包含文件 URI 的 intent 离开应用,则应用出现故障,并出现 FileUriExposedException 异常原创 2017-09-18 23:18:43 · 708 阅读 · 0 评论 -
android——运行时权限封装
前言前一段时间看了郭霖前辈的一个关于运行时权限封装的视频,现在写一篇文章总结一下我在这个视频里学到的知识。 首先讲一下运行时权限的基本使用: if (ContextCompat.checkSelfPermission(MainActivity.this, "权限名") != PackageManager.PERMISSION_GRANTED) { Activi原创 2017-08-30 17:08:51 · 608 阅读 · 0 评论 -
android获取外置sd卡路径
对于获取android的外置sd卡路径纠结了好长时间,可能是我的境界还不够吧,找到了方法却不知道是什么意思,只知道是使用StorageManager,我先把获取方法贴出来,最近好好研究一下StorageManager这个类,研究完了再来补充,下面是方法:public String[] getStoragePath() { try { StorageManage原创 2017-02-13 11:37:06 · 3294 阅读 · 0 评论