android
文章平均质量分 85
jxq1994
你若不离不弃,我必同归于尽
欢迎关注简书:https://www.jianshu.com/u/b8d2aee8cd4c
新的内容将在简书更新
展开
-
Binder与 四大组件工作原理 Service、BroadCastReceiver、ContentProvider
你会发现,这段代码和前面介绍的handleLaunchActivity差不多,都是从PMS中取出包的信息packageInfo,这是一个LoadedApk对象,然后获取它的classloader,反射出来一个类的对象,在这里反射的是Service。对,Receiver的插件化解决方案,就是这个思路。你也许会问,都在一个进程,App内部直接使用Binder对象不就好了,其实吧,要考虑不在一个进程的场景,代码又不能写两份,两套逻辑,所以就都放在一起了,即使在同一个进程,也要绕着AMS走一圈。原创 2023-04-27 17:30:59 · 794 阅读 · 0 评论 -
Binder 与 四大组件工作原理 其一
ApplicationThread(APT)接收到来自AMS的消息后,调用AcctivityThread的sendMessage方法,向Launcher的主线程消息队列发送PAUSE_ACTIVITY消息,发送消息是通过一个名为H的Handler类完成的,AMS给Activity发送的所有消息,以及给其他三大组件发送的消息,都是经过H类,既然都经过这条路,我们就可以从这里做插件化技术。启动新进程,就是启动一个新的app,为这个进程创建ActivityThread对象,这就是我们熟悉的UI主线程。原创 2023-04-27 16:39:31 · 781 阅读 · 0 评论 -
Ubuntu开机无法进入桌面
此文为记录Ubuntu重装系统之后,重启电脑,系统卡在Ubuntu图标显示之后,无法进入系统。出现这种情况,多半是由于显卡的问题,要么是显卡驱动出了问题,要么是显卡和当前Lunix内核不兼容。临时解决方案:在连接启动U盘的情况下开机。留意“GNU GRUB”启动加载程序屏幕。当您看到显示的“Ubuntu”选项时,按键盘上的“E”键(图1)。4. 在编辑器中,使用箭头键定位到以“linux /boot/vmlinuz***”开头的行的末尾5. 在行尾键入“nomodeset”行选项6.原创 2022-04-29 10:48:39 · 27356 阅读 · 8 评论 -
Glide缓存图片流程浅析
如果没有缓存,在大量的网络请求从远程获取图片时会造成网络流量的浪费,尤其是面对高清大图的加载更是如此,为了节省带宽,也为了减少用户等待的时间,合理的缓存方式必不可少,这也是Glide图片框架的强大之处。另外Glide的缓存机制可以说是非常高频的问题,Glide有几级缓存?Glide读取缓存的顺序和时机是什么?Glide存放缓存的顺序和时机又是什么?1.Glide中缓存概念简述Glide中的缓存分为两部分,内存缓存和硬盘缓存。1.1 内存缓存内存缓存又分为两级,一级是LruCache缓存,一级是弱引原创 2022-02-16 11:31:45 · 2053 阅读 · 0 评论 -
Glide图片加载流程浅析
Glide是Android开发中常用的图片框架,其最基本用法例如Glide.with(context).load(url).into(imageView),我们沿着此链式调用的顺序一窥Glide图片加载流程的样貌。一图胜千言1.Glide.with(context)// Glide.java public static RequestManager with(@NonNull Context context) { return getRetriever(context).get(co原创 2022-02-15 18:47:31 · 4683 阅读 · 1 评论 -
Android Studio 常用快捷键,提高工作效率
Ctrl组合快捷键Ctrl+Alt组合快捷键Ctrl+Shift组合快捷键其他组合快捷键转载 2020-03-03 19:51:26 · 190 阅读 · 0 评论 -
使用Dagger2与Kotlin过程中遇到的问题
以下只是记录在项目中遇到的坑,异常出现的原因可能是这个但不限于只是这个。1、问题=》A @Module may not contain both non-static and abstract binding methods场景=》Module文件中同时包含了@Provides和@Binds关键字例如: @Moduleabstract class Dis...原创 2019-11-06 18:35:38 · 721 阅读 · 0 评论 -
Android中的MVP
(1)MVP模式简介MVP是模型(Model)、视图(View)、主持人(Presenter)的缩写,分别代表项目中3个不同的模块。 模型(Model):负责处理数据的加载或者存储,比如从网络或本地数据库获取数据等; 视图(View):负责界面数据的展示;比如UI的展示,UI的界面的更新,用户输入的获取 主持人(Presenter):相当于协调者,是模型与视图之间的桥梁,将模翻译 2017-07-13 10:08:50 · 822 阅读 · 0 评论 -
Android WebView JS的注入
JavaScript在Web开发中非常有用,而现在越来越多的App界面也由Javascript来创建,我们需要解决一个问题:java与javaScript怎么进行交互呢? 例如,我们可以在html中创建一个按钮,为按钮事件添加一个界面。然后你可以使用html按钮跳转到另一个Activity中。(1)本地Html文件添加一个新的Assert文件夹右键点击“ App ”module>new>folde转载 2017-07-17 22:05:34 · 3323 阅读 · 0 评论 -
Android Launch Screen
了解启动屏幕首先,什么是启动屏幕?当我们第一次打开应用时,会有一个缓冲过渡的时间,应用会显示一次闪屏,特别是在冷启动的时候。那么我们为什么不向用户展示一些好玩的东西,比如我们的应用品牌?Youtube是这么做的:您花费在这个启动画面上花费的时间恰好是应用程序配置自身所需的时间。这也是一个冷启动,这意味着这是最慢的推出可能。如果应用程序被缓存,闪屏将几乎立即消失。最重要的是了解启动屏幕的工作原理以及如原创 2017-08-17 09:03:57 · 1806 阅读 · 0 评论 -
混合布局的实现方法
有的时候在应用中,我们可能需要两种不同的布局,比如上面是GridView,下面是ListView的样式;在上一篇的 RecyclerView:实现带header的grid中,提供了一种方法,但是这种方法并不够好用,非常之不建议使用。仅仅作为了解ViewType的用法。 今天介绍一种比较合理的方式来实现这个需求,需要用到的就是RecyclerView的header。在RecyclerView添加He原创 2017-04-01 15:24:25 · 1955 阅读 · 2 评论 -
RecyclerView添加Header的正确方式
如何为RecyclerView添加Header大家在使用ListView的时候可以很轻松的添加headers, 但是不知道大家发现没有,RecyclerView和各种LayoutManager都没有哪个方法是为添加header而设立的,这个时候我们就开始思考如何为RecyclerView添加header了。 这里我们的解决方案和网上你能搜到的大多数方案一样,是通过控制Adapter的itemType转载 2017-03-30 20:03:38 · 1441 阅读 · 0 评论 -
RecyclerView:实现带header的grid(ViewType和setSpanSizeLookup()方法)
GridView和ListView有许多的相似之处,不过也有一个显著的不同:没有header和footer。现在它们两者都可以用RecyclerView实现,我想看看如何在grid上添加header。GridLayoutManager我用GridLayoutManager创建了一个spanCount为2的RecylcerView。 注:spanCount即列数。这里GridLayoutManag转载 2017-03-29 18:01:03 · 6798 阅读 · 1 评论 -
利用FragmentTanHost实现底部导航栏
说明底部导航栏的实现方法是越来越多了,前面介绍了四种实现底部导航栏的方式,链接在这里。 至于孰优孰劣就要各位看官甄别啦。 今天的这种方式我认为是一种很不错的实现方式,利用FragmentTabHost+Fragment来完成。下图是完成效果:1.官方介绍FragmentTabHost继承自我们熟悉的TabHost,Google是这么介绍它的: Special TabHost that all原创 2017-03-28 16:08:22 · 947 阅读 · 2 评论 -
Android Studio导入Module图解
注意:本方法适用于关联SVN之后的Android Studio。1.依次点击File–>new–>Import Module,如下图:2.在弹出窗口中选中需要导入的项目中的app文件夹,如图:3.在下面的Module name中修改为与Module相关的名称,我这里不能用“app”是因为已经用过了,点击finish,可能会报错,如图: 错误提示应该会不一样,比如我这里是版本匹配的问题,将build原创 2017-03-07 17:38:33 · 764 阅读 · 0 评论 -
如何在Android中使用Realm数据库
我们都知道使用SQLite的本地数据库,它在Android 开发中用于内部存储器存储,主要存储本地数据,如联系人,电话详细信息等。现在我发现一个比SQLite更轻的数据库,被称为Realm数据库,我想我们可以彻底放弃SQLite了。简单 -数据将以Object的形式存储在数据库中,因此可以方便地从数据库中检索数据。Fast - Realm数据库比SQLite数据库快于数据库的查询执行和维护。跨原创 2017-07-21 19:04:54 · 1916 阅读 · 0 评论 -
RecyclerView的多选模式
在ListView中实现多选并不困难,因为它是自带多选模式的,主要包括CHOICE_MODE_MULTIPLE和CHOICE_MODE_MULTIPLE_MODAL。如果你想要更深入的了解这两者是如何工作的。那么这篇文章是非常适合你的。他们之间的区别大概就是CHOICE_MODE_MULTIPLE模式的特点在于他本身没有排斥性,在能选择item的情况下,也可以响应普通点击事件。CHOICE_MODE原创 2017-07-22 16:51:17 · 1772 阅读 · 0 评论 -
Android之handler消息传递机制
说明 今天学习的是Activity中UI组件中的信息传递Handler,相信很多朋友都知道,Android为了线程安全,并不允许我们在UI线程外操作UI;很多时候我们做界面刷新都需要通过Handler来通知UI组件更新!除了用Handler完成界面更新外,还可以使用runOnUiThread()来更新,甚至更高级的事务总线,当然,这里我们只讲解Handler,什么是Handler,执行流程,相关方原创 2016-09-01 21:42:01 · 617 阅读 · 0 评论 -
Flutter在Android Studio上的初启动
set FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn转载 2018-08-13 10:34:25 · 7301 阅读 · 1 评论 -
DataBinding 填坑总结
Problem 1:根据提示查看xml文件的157行:<.custom.CenteredIconButton android:layout_width="match_parent" android:layout_height="wrap_content" ...原创 2018-07-05 16:10:58 · 1934 阅读 · 0 评论 -
ViewOverlay与ViewGroupOverlay
有关ViewOverlay的官方文档非常清晰,您应该阅读它。它是什么?ViewOverlay 是存在于API 18+(Android 4.3)内的类,它是位于View视图层顶部的一个附加层,在View所有内容绘制完成后被绘制。 ViewGroupOverlay 是ViewOverlay的子类,对应于ViewGroup,同样地,这个层在ViewGroup中所有内容(包括childView)绘制完毕后...转载 2018-05-01 19:56:58 · 2740 阅读 · 0 评论 -
弹出PopupWindow后让背景变暗的方法
在Android上使用AlertDialog和PopupWindow都可以很方便的实现弹窗,AlertDialog弹出后背景会变暗,而PopupWindow不具有此特性。StackOVerflow上的这个问题里给出了三种方法以实现弹出PopupWindow后让背景变暗的效果,整理如下。1. 方法一使用WindowManager.LayoutParams.FLAG_DIM_BEHIND可以实现变暗的...转载 2018-05-01 17:13:25 · 6529 阅读 · 4 评论 -
AsyncTask的替代方案
在使用AsyncTask加载数据时,如果遇到设备配置改变,比如设备旋转,你得负责管理它的生命周期,同时还要保存好数据,不让其因旋转丢失。虽然调用Fragment的setRetainInstance(true)方法来保存数据可以解决问题,但它不是万能的。很多时候,你还得编写特殊场景应对代码,让应用无懈可击。这些特殊场景有:用户在AsyncTask运行时点击后退键,以及启动AsyncTask的fragm原创 2017-10-19 23:55:19 · 5648 阅读 · 0 评论 -
Android开源表格的实现分析
有的时候我们会遇到着这种需求:表格最上方的表头和最右方的表头以及中间的表体区域是不一样的;表格最右边的表头和中间的区域可以一起上下滑动,表格最上边的表头可以和中间的区域一起左右滑动;用图来说明最为直观:这是github上一个比较多人下载的一个开源控件。如果是你,你会怎么做?作者用了十分聪明的布局,很简单明了。它的地址在这里<LinearLayout xmlns:android="http:/转载 2017-08-27 20:48:45 · 747 阅读 · 0 评论 -
Android中后台服务与通知的协作工作
概述 现在的APP应用基本上都会有在后台运行服务,比如音乐播放器,即便你离开了当前应用它也会继续播放;QQ在你离开当前页面打开另一个应用时,一旦有新消息,它也会及时地通知给你。它们是怎么实现的呢?Http网络连接感谢干活集中营,为我们提供资源以及福利。我将利用其提供的API加载妹纸图片。让我们在忙碌的生活和学习中荡起双桨~应用将在RecyclerView视图(借助内置的GridLayoutManag原创 2017-07-26 22:47:19 · 1262 阅读 · 0 评论 -
Android Studio稀奇古怪的疑难杂症
Could not find com.afollestad:material-dialogs:XXXX 解决 ————————————————————如果你没有遇到过,那真是恭喜你了!!!千万别遇到,这个鬼东西搞得我几乎都要崩溃了,解决办法: 在build.gradle文件的 dependencies 中注释掉包含有dialog的那行代码,在下面添加一行: compile(‘com.afo原创 2017-03-07 15:12:42 · 767 阅读 · 0 评论 -
Android之Fragment初窥门径(接口的简单流程)
Fragment基本概念Fragment是Android3.0后引入的一个新的API,他出现的初衷是为了适应大屏幕的平板电脑, 当然现在他仍然是平板APP UI设计的宠儿,而且我们普通手机开发也会加入这个Fragment, 我们可以把他看成一个小型的Activity,又称Activity片段!想想,如果一个很大的界面,我们 就一个布局,写起界面来会有多麻烦,而且如果组件多的话是管理起来也很麻烦!而使原创 2016-09-16 12:28:30 · 1171 阅读 · 0 评论 -
强大的Android图片下载缓存库——Picasso<二>
在学习如何加载,调整大小,缩放图像以及如何通过多个方面影响图像管理之后,我们将介绍一个非常高级的优化:Tag()。 Picasso提供对许多图片请求进行分组,以便一起管理它们。Picasso的Tag() 在上一篇博文中,您已经了解了如何确定某些图片的优先级。 这可能是不够的,我们有时还需要同时取消,暂停或恢复多个图像。 如果您的视图快速变化,则取消之前过期屏幕上的图原创 2016-11-25 17:37:32 · 447 阅读 · 0 评论 -
Android之Notification(通知)的用法
本节引言:本节带来的是Android中用于在状态栏显示通知信息的控件:Notification,相信大部分 学Android都对他都很熟悉,而网上很多关于Notification的使用教程都是基于2.x的,而 现在普遍的Android设备基本都在4.x以上,甚至是5.0以上的都有;他们各自的Notification 都是不一样的!而本节给大家讲解的是基于4.x以上的Notif转载 2016-09-15 15:15:22 · 1549 阅读 · 0 评论 -
BroadCast广播接收器
什么是BroadcastReceiver Broadcast直译广播,我们举个形象的例子来帮我理解下BroadcastReceiver,记得以前读书 的时候,每个班级都会有一个挂在墙上的大喇叭,用来广播一些通知,比如,开学要去搬书,广播: “每个班级找几个同学教务处拿书”,发出这个广播后,所有同学都会在同一时刻收到这条广播通知, 收到,但不是每个同学都会去搬书,一般去搬书的都是班里的”大力士”,转载 2016-09-20 17:10:25 · 608 阅读 · 0 评论 -
Android之在IntentService中执行后台程序
说明——关于四大组件之一的Service,对它的基本用法不熟悉的可以去看看这个博客!Service完全解析除非我们特别为某个操作指定特定的线程,否则大部分在前台UI界面上的操作任务都执行在一个叫做UI Thread的特殊线程中。这可能存在某些隐患,因为部分在UI界面上的耗时操作可能会影响界面的响应性能。UI界面的性能问题会容易惹恼用户,甚至可能导致系统ANR错误。为了避免这样的问题,Android原创 2016-09-21 22:49:59 · 2536 阅读 · 0 评论 -
Android 使用Gson解析Json数据
Json的概念以及与XML的比较:Json是什么? JSON(JavaScript Object Notation)是一种轻量级(轻量级?简单、易操作、快捷)的数据交换格式。主要目的就是给出一套通用的数据格式,大家按照这种格式定义自己的数据,方便数据的交换。特点是(相对来说)易于人阅读和编写,易于机器解析和生成。Json与XML的比较:JSON和XML的数据可读性基本相同;JSON和XML同样原创 2016-09-06 19:49:32 · 707 阅读 · 0 评论 -
Android底部导航栏的四种实现
现在大多数App都会用到底部导航栏,比如常见的聊天工具QQ、微信,购物App等等,有了底部导航栏,用户可以随时切换界面,查看不同的内容。它的实现方式也很多,以前大多使用TabHost来实现,但是现在我们有很多更好的选择。使用LinearLayout + TextView实现了底部导航栏的效果首先看看工程目录:Step 1:实现底部选项的一些资源文件图片Drawable资源:tab_menu_deal转载 2016-09-18 13:10:19 · 110382 阅读 · 106 评论 -
Android网络之Volley的使用
Volley的概念及优点Volley是一个 HTTP 库,它能够帮助 Android app 更方便地执行网络操作,最重要的是,它更快速高效。平时Android中用到网络操作,我们最熟悉的无非就是HttpURLConnection以及HttpClient(已经弃用),不过这两种方法的用法还是有一些复杂,而Volley大大地简化了网络操作,只需几行代码即可完成HttpURLConnection可完成的原创 2016-09-09 22:35:36 · 739 阅读 · 0 评论 -
Android UI控件之AlertDialog
在应用程序中有些时候,如果想询问用户采取决定是或否所采取的特殊动作的回应,由停在原来的活动而不改变屏幕,可以使用警告对话框(Alert Dialog)。AlertDialog继承自Dialog类,对于Android内置的AlertDialog,它可以包含一个标题、一个内容消息或者一个选择列表、最多三个按钮。而创建AlertDialog推荐使用它的一个内部类AlterDialog.Builder创建。原创 2016-08-24 22:26:38 · 904 阅读 · 1 评论 -
Android5.0 新特性--CardView
说明CardView是一个新增加的UI控件,它继承自FrameLayout,所以CardView是一个ViewGroup,我们可以在里面添加一些控件进行布局。1.环境配置 (1)新建一个Project。在Gradle Scripts目录下打开第二个build.gradle(Module:app),注意不是第一个build.gradle(Project:CardViewDemo).第一个build.原创 2016-07-09 12:28:13 · 530 阅读 · 0 评论 -
Android Studio中如何创建帧动画文件(animation-list文件)
有时候我们会想要做一个简单的逐帧动画的效果,在eclipse中很简单就可以创建,直接在res/drawble文件夹下面新建就行。可是在Android Studio中这样做不行。首先确保自己是在Android视图,如图所示 然后在“app”处右键,如图所示 选择“Android resource file”选项,弹出对话框,填写如图所示 注意 Resource Type 和 Root elem原创 2016-07-12 20:03:00 · 14661 阅读 · 3 评论 -
Android控件--侧边栏SideBar
说明 很多应用中我们都能看到关于侧边栏的使用,比如微信啊,QQ啊,美团啊等等,最常见的应该就是通讯录里面对联系人进行A~Z的排序。侧边栏主要是方便用户进行字母索引。今天实现的控件效果如下图所示: 工程结构图: 1.Sidebar的JAVA类文件package com.example.mysidebar;import android.annotation.TargetApi;import an原创 2016-07-07 21:53:09 · 9070 阅读 · 2 评论 -
Android控件--ClearEditText带清除功能的输入框
说明有的时候我们写布局的时候难免会遇到给控件设置drawableRight或者是drawableleft这样的属性为控件添加个图标之类的情况。 比方说我们做登录界面的时候,账号的框框里可能要显示一个人头的小图标,密码框可能要显示一个小锁的图标。 当然这些只是显示的问题,不会有太大难度。现在其实有很多的图标显示在右边的,而且这些小图标都是需要响应一些点击事件的,比如一按清除图标,清除整行文字,这个原创 2016-07-07 17:35:22 · 1236 阅读 · 0 评论 -
如何高效加载Bitmap
高效加载大图有的时候我们需要在App中加载一张很大的图片,比如5M甚至50M,这个时候如果直接将这么大的图片加载到布局中,将引起OOM错误。下面的方法可以有效的避免这种内存溢出错误。图片有不同的形状与大小。在大多数情况下它们的实际大小都比需要呈现的尺寸大很多。例如,系统的图库应用会显示那些我们使用相机拍摄的照片,但是那些图片的分辨率通常都比设备屏幕的分辨率要高很多。考虑到应用是在有限的内存下工作的,转载 2016-10-12 15:56:34 · 1223 阅读 · 0 评论