
Android高级
文章平均质量分 57
蓝枫amy
Android开发工程师、HarmonyOS开发工程师
展开
-
Android中的内存泄漏
什么是内存泄漏长生命周期的对象持有了短生命周期的对象,从而导致短生命周期的对象不能被释放垃圾回收机制原创 2020-03-22 14:15:18 · 1319 阅读 · 0 评论 -
AsyncLayoutInflater的使用
如果xml文件过大或者页面布局嵌套过深,布局的加载就会比较耗时如何解决:(1) 优化布局文件,避免布局嵌套过深 (2) 把耗时的布局渲染操作放在子线程中,等inflate操作完成后再回调到主线程Android 为我们提供了AsyncLayoutInflater类来进行异步布局加载public class MainActivity exten...原创 2020-01-15 09:56:13 · 4012 阅读 · 4 评论 -
Android倒计时控件,Splash界面5秒自动跳转
现在很多app的首页都有一个倒计时控件,比如说3秒或者5秒自动跳转界面,或者点击控件直接跳过首先,自定义控件CircleProgressbar(参考网上资料)package com.zhoujian.mykeep.view;import android.annotation.TargetApi;import android.content.Context;import android.cont原创 2017-03-14 09:33:05 · 7054 阅读 · 0 评论 -
FlexboxLayout的使用
简介Flexbox 是前端领域CSS的一种布局方案,可以简便、完整、响应式地实现各种页面布局,并且 React Native 也是使用的 Flex 布局。FlexboxLayout 是针对 Android 平台的,实现类似 Flexbox 布局方案的一个开源项目,开源地址:https://github.com/google/flexbox-layout实现效果翻译 2017-03-31 13:48:33 · 1580 阅读 · 0 评论 -
Webview与Javascript的交互
MainActivity.javapackage com.zhoujian.webviewandjavascript;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.webkit.JavascriptInterface;import android.web翻译 2017-03-25 11:21:17 · 272 阅读 · 0 评论 -
Android 7.0 下载安装apk报错:FileUriExposedException
简介随着Android版本越来越高,Android对隐私的保护力度也越来越大,为了提高私有文件的安全性,Android 7.0 引入了“私有目录被限制访问“,在 Android 7.0 或者更高版本的应用私有目录将被限制访问。解决办法在res目录下,创建xml目录,并在xml目录中,创建file_paths.xml文件Android/data+项目包名<?xml version="1.0" en原创 2017-03-27 10:32:51 · 620 阅读 · 0 评论 -
Android中adb命令的使用
adb工具位于SDK的platform-tools目录下,需要使用adb命令,要切换到该目录下,或者将platform-tools的路径添加到系统环境变量中,配置好后,就可以使用adb命令了adb version如果显示如下内容,就表示配置成功了zhoujiandeMacBook-Pro:CustomeView zhoujian$ adb versionAndroid Debug Bridge v原创 2017-06-09 09:36:17 · 1009 阅读 · 0 评论 -
Android7.0的FileProvider适配
一.概述在官方7.0的以上系统中,尝试传递file://URL可能触发FileUriExposedException二.拍照案例翻译 2017-08-14 13:37:54 · 1149 阅读 · 0 评论 -
使用OkHttp之Websocket实现长连接
最近因为项目中用到了长连接,本来打算使用Socket,无意间发现了Websocket,实现起来很方便。首先在在build.gradle中添加对Okhttp的支持compile 'com.squareup.okhttp3:okhttp:3.8.1' compile 'com.squareup.okhttp3:mockwebserver:3.8.1'布局文件<?xml version="1.0"原创 2017-08-31 11:06:06 · 10326 阅读 · 1 评论 -
Android基本组件的开发规范
1.Activity间的数据通信,对于数据量比较大的,避免使用Intent+Parcelable的方式,可以考虑EventBus等替代方案,以免造成TransactionTooLargeException2.Activity中onSaveInstanceState()方法不是Activity生命周期方法,也不保证一定会被调用。它是用来在Activity被意外销毁时保存UI状态的,只能用于保存临时性...翻译 2018-03-15 16:07:23 · 278 阅读 · 0 评论 -
Android 触摸事件传递机制
1.1 触摸事件的类型ACTION_DOWN:用户手指按下的操作ACTION_MOVE:用户手指移动操作ACTION_UP:用户手指离开屏幕操作 1.2 事件传递的三个阶段分发事件:dispatchTouchEvent方法拦截事件:onInterceptTouchEvent方法消费事件:onTouchEvent方法在Android系统中,拥有事件传递处理能力的类...翻译 2018-09-12 20:47:36 · 134 阅读 · 0 评论 -
ConstraintLayout
##一.ConstraintLayout简介ConstraintLayout是Android Studio 2.2中主要的新增功能之一,ConstraintLayout是使用可视化的方式来编写界面。ConstraintLayout优点:ConstraintLayout是采用约束的方式来指定各个控件的位置和关系的,它有点类似于RelativeLayout,它可以有效地解决布局嵌套过多的问题。...原创 2019-05-23 19:50:30 · 219 阅读 · 0 评论 -
ConstraintLayout
##一.ConstraintLayout简介ConstraintLayout是Android Studio 2.2中主要的新增功能之一,ConstraintLayout是使用可视化的方式来编写界面。ConstraintLayout优点:ConstraintLayout是采用约束的方式来指定各个控件的位置和关系的,它有点类似于RelativeLayout,它可以有效地解决布局嵌套过多的问题。#...原创 2019-05-23 19:53:44 · 200 阅读 · 0 评论 -
Android Studio中需要掌握的Debug调试技巧
##一.基本使用Android Debug 有两种途径:第一种方式:直接点击下图运行按钮右侧的图标,进入Debug模式。第二种方式:如果app处于运行状态,点击下面的图标也可以进入Debug模式。点击后会弹出对话框:点击OK进入Debug模式下面是一些常见的Debug调试方法从左到右第一个:Step Over(单步执行)第二个:Step Into(进入方法)第三...原创 2019-06-25 19:35:01 · 395 阅读 · 0 评论 -
ImageSwitcher实现任意view轮播效果
MainActivity.javapackage com.zhoujian.myapplication;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;impo...原创 2020-05-24 10:36:26 · 404 阅读 · 0 评论 -
EditText监听中文算2个字符、英文和数字算1个字符或者中文、英文、数字都算一个字符
activity_second.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layou...原创 2019-09-16 11:04:39 · 508 阅读 · 0 评论 -
Android 6.0 Doze模式
Doze模式简介Android 6.0 系统中,google加入了一个全新的Doze模式,可以大幅度地延长电池的 使用寿命什么是Doze模式?当设备是Android 6.0 或者以上系统时,如果设备未插电源且屏幕关闭了一段时间之后,就会进入Doze模式。在Doze模式下,系统会对CPU、网络、Alarm等活动进行限制,从而延长了电池的使用寿命。Doze模式工作过程: 图片来自网络:可以看出,随着翻译 2017-03-23 10:40:17 · 568 阅读 · 0 评论 -
Android 7.0 多窗口模式
多窗口模式简介由于手机屏幕大小的限制,传统情况下一个手机只能同时打开一个应用程序。从Android 7.0 开始引入多窗口模式功能,如许在一个屏幕中同时打开两个应用程序。进入多窗口模式注意:使用的是Genymotion模拟器 Google Nexus 5X-7.0.0打开任意程序,长按Overview即可进入多窗口模式。多窗口模式,同时打开两个应用当横竖屏切换的时候,自动切换成左右分屏的多窗口模式原创 2017-03-22 15:02:54 · 1467 阅读 · 0 评论 -
JNI和NDK编程
一.JNI和NDK简介JNI: Java Native Interface(java 本地接口),它是为了方便Java调用C、C++等本地代码所封装的一层接口。NDK: 是Android所提供的一个工具接口,通过NDK可以在Android中更加方便地通过JNI来访问本地代码。NDK提供了交叉编译器,开发人员通过修改mk文件就可以生成特定CPU平台的动态库。NDK的好处:提高代码的安全性。因为so库原创 2017-03-20 14:36:05 · 228 阅读 · 0 评论 -
ContentPrivider实现IPC
1.内容提供者介绍ContentPrivider内容提供者是Android中提供的专门用于不同应用间进行数据共享的方式当我们需要操作其他应用程序的一些数据,例如我们需要操作系统里的媒体库、通讯录等,这时我们就可能通过ContentProvider来满足我们的需求了。ContentPrivider可实现进程间通信,ContentPrivider的底层是Binder2.创建内容提供者packag原创 2016-11-30 14:39:10 · 947 阅读 · 0 评论 -
Socket实现进程间通信
1.Socket简单介绍Socket可以实现进程间通信,Socket称为”套接字”,它分为流式套接字和用户数据套接字, 分别对应网络中的TCP和UDP协议。TCP协议是面向连接的协议,提供稳定的双向通信功能,TCP连接的建立是通过三次握手才能完成,稳定性高,效率相对UDP较低。UDP协议是面向无连接的,提供单向通信功能,效率高,不保证数据一定能够正确传输。Android4.0以后不能在主线程翻译 2016-12-01 11:53:07 · 2051 阅读 · 0 评论 -
AsyncTask下载网络图片并显示下载进度
1.AsyncTask概述AsyncTask是一个轻量级的异步任务类,它可以在线程池中执行后台任务,然后把执行的进度和最终结果传递给主线程并在主线程中更新UI,AsyncTask封装了Thread和Handler,AsyncTask并不适合做特别耗时的任务。AsyncTask是一个抽象的泛型类,提供了Params、Progress、Resault三个参数。Params表示参数类型,Progress表原创 2016-12-14 18:17:46 · 650 阅读 · 0 评论 -
RemoteViews自定义通知栏
1.RemoteViewsRemoteViews是一个远程的View ,它可以在其他进程中显示,RemoteViews可以用于跨进程更新它的界,RemoteViews的应用主要在通知栏和桌面小部件的开发过程中,通知栏是通过NotificationManager的notify()方法实现的,桌面小部件是通过AppWidgetProvider来实现的。2.代码实现package com.zhoujian原创 2016-12-07 11:47:48 · 610 阅读 · 0 评论 -
使用Messenger实现进程间通信
Messenger可以翻译为信使,通过它可以在不同进程中传递Message对象,底层是AIDL,一次处理一个请求,不存在并发执行的情形MessagerActivity位于默认进程中,默认进程名为包名:com.zhoujian.androidMessagerService位于私有进程:com.zhoujian.android:romoteandroid:process=":romote"利用Mess原创 2016-11-28 16:39:08 · 552 阅读 · 0 评论 -
Android中的线程池
1.线程池的好处(1)重用线程池中的线程,避免因为线程的创建和销毁所带来的性能的开销。 (2)能有效控制线程池的最大并发数,避免线程间因抢占系统资源而导致线程阻塞。 (3)能够对线程进行管理,并提供定时执行及指定间隔循环执行等功能2.线程池的配置ThreadPoolExecutor是线程池的正真实现 public ThreadPoolExecutor(int corePoolSize,翻译 2016-12-16 11:10:48 · 246 阅读 · 0 评论 -
Android中Handler机制
1.Handler概述Handler 可以将一个任务切换到Handler所在线程中去执行,Handler的主要作用是更新UI,有时候需要在子线程进行耗时的I/O操作(读取文件或者访问网络),当耗时任务完成后,需要在UI线程中做一些改变,由于我们不能在子线程中访问UI控件,否则会发生异常,通过Handler就可以将跟新UI操作切换到主线程中执行。2.Handler机制注意:子线程中默认是没有Loope原创 2016-12-14 11:18:29 · 970 阅读 · 0 评论 -
RecyclerView的使用
一.RecyclerView的介绍通过布局管理器LayoutManager,控制其显示的方式通过ItemDecoration,控制Item间的间隔通过ItemAnimator,控制Item增删的动画点击、长按事件,需要自己实现二.RecyclerView的使用直接上代码:MainActiivity.javapackage recycleviewdemo.zhoujian.com.recyc原创 2017-01-03 09:26:21 · 502 阅读 · 0 评论 -
Android动态改变app在桌面上的icon
本文参考了@xuyisheng:https://gold.xitu.io/post/585a897aac502e0067130874activity-alias <activity-alias android:name=".NewYear" android:enabled="false" android:icon="翻译 2016-12-27 18:17:40 · 692 阅读 · 0 评论 -
磁盘缓存DiskLruCache源码
/* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You翻译 2016-12-28 11:13:45 · 498 阅读 · 0 评论 -
Android中的线程
1.Android中的线程概括线程与进程 线程:线程是CPU调度的最小单元,同时线程也是一种有限的系统资源,即线程不可能无限制的产生,并且线程的创建和销毁有开销 进程:一般指一个执行单元,在pc和移动设备上指的是一个程序或者一个应用。主线程和子线程 主线程:指的是进程所拥有的线程,在java中默认情况下一个进程只有一个线程,这个线程就是主线程 子线程:工作线程,除了主线程以外的都是子线程原创 2016-12-14 15:23:10 · 858 阅读 · 0 评论 -
Android的硬件加速及可能导致的问题
问题在Android 4.0的某些设备上,在View刷新时会出现花屏和屏幕上的某些View错位的现象。 经过调查后发现adb logcat中出现很多OpenGLRenderer: 0x501的错位:09-18 14:34:39.090: DEBUG/OpenGLRenderer(3104): GL error from OpenGLRenderer: 0x50109-18 14:34:39.386转载 2017-01-22 14:10:48 · 2947 阅读 · 2 评论 -
Android百分比布局
基本介绍Android提供了Android-percent-support这个库,支持百分比布局,在一定程度上可以解决屏幕适配的问题他提供了:两种布局: PercentRelativeLayout和PercentFrameLayout PercentRelativeLayout继承RelativeLayout PercentFrameLayout继承FrameLayout 对于线性布局,可原创 2017-03-04 12:29:52 · 723 阅读 · 0 评论 -
Android Studio中创建aidl文件
首先在对应包名新建包aidl,在包aidl下创建对应的java类其次,在main目录下,创建aidl,然后创建包:包名.aidl,在其下面创建相应的aidl文件如何生成aidl对应的java类呢?对应的java类位于哪个目录下呢?创建完成后,点击Build下面的Rebuild Project,就会生成对应的java文件。具体目录看下图:原创 2017-02-25 15:15:02 · 502 阅读 · 0 评论 -
Android6.0权限封装
简介Android6.0中对权限分为了一般权限和危险权限。一般权限:只要在清单文件中注册即可使用。危险权限:除了要在清单文件中注册外,还要对用户进行请求权限弹窗提醒,才可以使用。危险权限关于日历的权限:<uses-permission android:name="android.permission.READ_CALENDAR"/><uses-permission android:name=原创 2017-03-05 12:06:26 · 1248 阅读 · 0 评论 -
Android中的AIDL
1.AIDL介绍为使应用程序之间能够彼此通信, Android提供了IPC(Inter Process Communication,进程间通信)的一种独特实现: AIDL -Android Interface Definition Language, Android接口定义语言。2.项目结构3.项目代码1.新建Book类实现Parcelable —- Book.javapackage com.zho翻译 2016-11-29 14:24:13 · 382 阅读 · 0 评论