
Android
Zhu_72
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
WindowManager基本原理
所有需要显示到屏幕上的内容,都是通过WindowManager来操作的。从Dialog的构造函数开始看context.getSystemService()根据键值对取出WindowManager,该对象的创建位于ContextImpl初始化时,最终返回的是WindowManager的实现类WindowManagerImpl。通过setWindowManager()将windowManager与window绑定Dialog(@NonNull Context context, @StyleRes int原创 2020-09-22 12:03:35 · 378 阅读 · 0 评论 -
ActivityThread和Application启动流程
ActivityThread基于Android-29ActivityThread就是UI线程即主线程,其中有main方法是整个APP的入口,在这里初始化了MainLoopermainHandler:ApplicationThread中的方法执行以及Activity的创建都依赖于主线程Handlerattach()方法 public static void main(String[] args) { ... Looper.prepareMainLooper();原创 2020-09-11 11:53:26 · 595 阅读 · 0 评论 -
Android注解以及自定义注解实例与解析
Android注解以及自定义注解实例与解析1. 什么是注解注解是JDK1.5版本开始引入的一个特性,用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行标记,例如我们常见的@Override和@Deprecated,一般常用的注解可以分为三类:一类是Java自带的标准注解,包括@Override(标明重写某个方法)、@Deprecated(标明某个类或方法过时)和@SuppressWarnings(标明要忽略的警告),使用这些注解后编译器就会进行检查。一类为元注解,元注解原创 2020-09-11 09:37:08 · 741 阅读 · 1 评论 -
Volley源码解析(二)
上一篇博客介绍了Volley的请求流程,本篇会分别介绍请求过程,缓存过程,回调过程请求过程从NetworkDispatcher的run方法开始分析 while (true) { Request<?> request; try { // Take a request from th...原创 2020-02-28 19:36:16 · 128 阅读 · 0 评论 -
Volley源码解析(一)
Volley基本用法本文章目的不在于介绍Volley的用法,仅对基本的用法进行介绍,意在引出源码解析的入口Volley的基本用法通常为3步创建RequestQueue创建Request将Request加入RequestQueue以Josn请求为例RequestQueue mQueue = Volley.newRequestQueue(context);JsonObjectRe...原创 2020-02-27 19:14:41 · 252 阅读 · 1 评论 -
不同系统版本中新增方法、新增类的兼容
当应用需要适配新的系统版本,使用系统SDK中新增的类时,需要同时适配旧的版本。类的新增方法:通过反射的形式。Class cls = Class.forName("com.android.internal.telephony.BlockChecker");Method method = cls.getDeclaredMethod(methodName, paramType1, paramTy...原创 2019-11-08 12:04:02 · 199 阅读 · 0 评论 -
AsyncTask工作原理
AsyncTask封装了Thread,Handler,用于方便的执行后台任务以及在主线程中访问UI。类的声明如下:public abstract class AsyncTask<Params, Progress, Result> 首先看execute()方法,execute()直接调用了executeOnExecutor()方法:可以看到,首先调用了onPreExecute(...原创 2019-08-29 17:20:01 · 591 阅读 · 1 评论 -
Looper,MessageQueue,Handler,ThreadLocal--记录
今天看了一下Android消息机制,查资料加思考,仅作为记录ThreadLocalThreadLocal:为每个线程保存一份变量的副本。原理:先看set(),首先获取当前线程t,然后通过getMap(t)获取ThreadLocalMap实例,如果存在,则调用map的set(),否则创建map并传值。 public void set(T value) { Thread t ...原创 2019-08-29 11:31:54 · 290 阅读 · 0 评论 -
Android Service+AsyncTask实现断点续传下载并在前台通知栏显示下载进度
创建接口用于对下载状态的监听和回调。public interface DownloadListener { void onProgress(int progress); void onSuccess(); void onFailed(); void onPause(); void onCanceld();}创建下载异步任务。提供开始,...原创 2019-08-26 12:12:57 · 394 阅读 · 0 评论 -
Android 调用相机拍照并显示,打开相册并显示
调用相机拍照并显示设置拍照保存路径并将之转换为Uri启动相机,并传递该Uri作为参数在保存路径读取照片并显示private void takePhoto() { //创建File对象,用于储存拍照后的图片 File outputImage = new File(getExternalCacheDir(), "output_image.jpg"); ...原创 2019-08-23 15:32:39 · 3042 阅读 · 0 评论 -
Android Notification的使用
点击按钮实现弹窗通知@Override public void onClick(View view) { switch (view.getId()) { case R.id.send_notice: //创建点击后跳转页面intent Intent intent = new Inten...原创 2019-08-22 20:23:25 · 320 阅读 · 1 评论 -
Content Provider使用方法以及Android运行时权限申请
本文通过一个获取所有联系人实例来展示如何获取其他应用数据以及运行时权限申请过程。AndroidManifest.xml加入如下权限<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>声明一个listView存放取到的联系人信息;检测是否有对应权限,...原创 2019-08-22 19:49:49 · 1878 阅读 · 0 评论 -
RecycleView最佳实践-横向,竖向滑动,瀑布流
代码首先在gradle中添加依赖dependencies { ... implementation 'androidx.recyclerview:recyclerview:1.0.0'}定义一个适配器需要继承自RecyclerView.Adapter<FruitAdapter.ViewHolder>,传入泛型类型。public class Fru...原创 2019-08-22 19:34:14 · 525 阅读 · 0 评论 -
ListView最佳实践
思路利用getView()中contentView参数是用于对加载好的布局的缓存,将一个存放listview的item的ui控件的holder利用view.setTag()存放在该contentView的tag中,当contentView不为null时,直接取出holder更改ui控件的显示内容即可。代码ListView的Adapterpublic class FruitAdapter e...原创 2019-08-22 19:24:05 · 254 阅读 · 0 评论 -
Android使用Brocast Receiver实现强制下线功能
思路在list中存放所有Activity在收到强制下线的广播时,弹窗提示并关闭所有Activity。代码引用文本创建Activity记录类,提供add,remove,finish方法。public class ActivityCollector { public static List<Activity> activityList = new ArrayLi...原创 2019-08-22 19:09:27 · 381 阅读 · 0 评论