
Android
本然233
努力做一个优秀的程序媛!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
第4章 View的工作原理
一、ViewRoot 和 DecorViewViewRoot对应于ViewRootImpl 类,它是连接WIndowManager 和 DecorView的纽带,View的三大流程均是通过VIewRoot来完成的,在ActivityThread中,当Activity对象被创建后,会将DecorView 添加到Window中,同时会创建VIewRootImpl对象,并将ViewRootImpl...原创 2020-03-23 18:23:07 · 627 阅读 · 0 评论 -
第3章 View的事件体系
文章目录一、View基础知识1. View 的位置参数2. MotionEvent 和 TouchSlop1)MotionEvent:在手指触摸后产生的一系列事件2)TouchSlop:是系统所能识别的被认为是滑动的最小距离3. VelocityTracker 、GestureDetector 和 Scroller1)VelocityTracker:速度追踪,追踪手指在滑动过程中的速度2)Gest...原创 2020-03-23 15:47:30 · 1313 阅读 · 0 评论 -
第2章 IPC机制
第2章 IPC机制IPC 是 Inter-Process Communication 的缩写,含义为进程间通信或跨进程通信Serializable 和 Parcelable 区别Serializable是Java中的序列化接口,使用起来开销很大,序列化和反序列化都需要大量的I/O操作。Parcelable是Android中的序列化方法,更适用于Android平台,缺点是使用稍麻烦,但是效率...原创 2020-03-22 08:05:06 · 869 阅读 · 0 评论 -
第10章 Android的消息机制
1. 前因Handler的主要作用是讲一个任务切换到某个指定的线程中工作,主要用于更新UI,因为Android规定访问UI只能在主线程中进行(Android的UI控件不是线程安全的,上锁机制会让UI的访问逻辑复杂,且锁机制会降低UI访问效率,所以最简单高效的方法就是用单线程模型来处理UI操作)。2. 工作原理Handler创建时会采用当前线程的Looper来构建内部的消息循环系统。通过Ha...原创 2020-03-18 18:35:26 · 495 阅读 · 0 评论 -
第1章 Activity的生命周期和启动模式
《Android开发艺术探索》笔记——第一章 Activity的生命周期和启动模式1. Activity的生命周期1)正常情况下第一次启动onCreate --> onStart --> onResume用户打开新的Activity或者切换到桌面onPause --> onStop如果新Activity是透明主题,那么不会调onStop用户再次回...原创 2020-03-17 17:55:15 · 331 阅读 · 0 评论 -
Android-View学习(二)
系列学习:https://www.gcssloop.com/customview/CustomViewIndex/一、View的生命周期https://www.jianshu.com/p/08e6dab7886e构造View() --> onFinishInflate() --> onAttachedToWindow() --> onMeasure() --> onS...原创 2020-03-16 19:29:57 · 261 阅读 · 0 评论 -
解决Android通知栏遇到的坑:动态注册广播无法触发点击事件
通过点击通知栏发送广播有个坑:动态注册广播无法触发点击事件,其实是可以解决的。代码示例://AndroidManifest清单文件配置<receiver android:name=".MyReceiver"/>//点击事件接收的广播public class MyReceiver extends BroadcastReceiver { public static fi...原创 2020-03-14 16:25:11 · 2374 阅读 · 1 评论 -
Android-通知栏Notification学习
https://blog.youkuaiyun.com/vipzjyno1/article/details/25248021一、使用步骤1)创建一个通知栏的Builder构造类 (Create a Notification Builder)2)定义通知栏的Action (Define the Notification’s Action)定义通知栏的Action (Define the Notif...原创 2020-03-14 15:56:16 · 506 阅读 · 0 评论 -
Android-屏幕分辨率学习
一、Android 屏幕尺寸、px、dpi、dip、sp参考:https://blog.youkuaiyun.com/m0_37828249/article/details/79061899屏幕尺寸:指屏幕的对角线长度,单位是英寸,1英寸等于2.54厘米,常见尺寸有2.4,2.8,3.5,3.7,4.2,5.0,5.5,6.0等。屏幕分辨率px:指在纵横向上的像素点数,单位是px,1px为一个像...原创 2020-03-14 15:49:57 · 546 阅读 · 0 评论 -
Android-View学习(一)
参考郭霖大大的博客做的笔记~~~Android LayoutInflater原理分析,带你一步步深入了解View(一)1 获取1)LayoutInflater layoutInflater = LayoutInflater.from(context);2)LayoutInflater layoutInflater = (LayoutInflater) context.getSystemS...原创 2020-03-09 19:28:45 · 287 阅读 · 0 评论 -
Android不同存储方式与所需权限
首先,App在手机上保存文件或者缓存数据时,应该遵守以下几点:1、不要随意占用用户的内置存储。2、不要随意在SD卡上新建目录,应该放置自己应用包名对应的扩展存储目录下,卸载App时可以被自动清除。3、对占用的磁盘空间有上限,并按照一定的策略进行清除。一、手机存储路径Android系统分为内部存储和外部存储,内部存储是手机系统自带的存储,一般空间都比较小,外部存储一般是SD卡的存储,空间一...原创 2020-02-24 16:24:56 · 9328 阅读 · 0 评论 -
Android8.0java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation
Android O(API26、27)版本有一个bug,在设置方向属性时会crash:出现场景:1)manifest中android:screenOrientation="portrait"或2)代码中setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);原因这个问题貌似已经被广泛的讨论了,最终我们锁定了...原创 2019-10-25 10:28:51 · 812 阅读 · 0 评论 -
findbugs问题解决
1)NP_ALWAYS_NULL: Null pointer dereferenceA null pointer is dereferenced here. This will lead to a NullPointerException when the code is executed.解释:有一条语句的分支,如果执行该分支,则将引用空值,这将在执行代码时生成NullPointerE...原创 2019-10-23 20:53:48 · 4415 阅读 · 0 评论 -
记一次解决ANR问题
一次测试过程中出现anrANR Input dispatching timed out(Waiting to send non-key event because the touched window has not finished processing certain input events that were delivered it over 500.0ms ago.1)导出tr...原创 2019-10-23 20:28:42 · 1260 阅读 · 0 评论 -
Android——build.gradle 文件详解
安卓项目中有两个build.gradle文件,一个在最外层目录下,一个是在app目录下。最外层目录下的build.gradlebuildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.1.3...原创 2018-08-20 20:01:09 · 1337 阅读 · 0 评论 -
Android属性动画-ObjectAnimator
1 概览先看一下属性动画的结构,View动画的基类是Animation,属性动画的基类是AnimatorValueAnimator:这个动画是针对属性的值进行动画的 ,不会对UI造成改变,不能直接实现动画效果。需要通过对动画的监听去做一些操作,在监听中将这个值设置给对应的属性,对应的属性才会改变。ObjectAnimator:直接动画所给的对象,他会调用对象对应属性的get/set方法吧...原创 2018-11-02 09:47:06 · 2568 阅读 · 0 评论 -
RecyclerView设置缓存大小
前两天遇到问题,RecyclerView使用GridView布局,滑出界面两行再划回来,只有第一行只有前两个grid位置的控件还保留原来功能,后面的都失活了,觉得是控件的问题,然后最终解决,以下是帮助了我的文章,收藏!有时间详细学习!1熟悉RecyclerView 缓存的同学应该知道(后面在也会介绍RecyclerView缓存机制),当RecyclerView中的itemView 滑出屏幕后会...转载 2018-11-13 12:43:25 · 16283 阅读 · 1 评论 -
Android Chronometer(计时器)
转自:Android Chronometer(计时器)android提供了一个计时器组件——Chronometer,继承自TextView。显示的是某个时间点开始以及之后的时间增加。在XML中配置: <Chronometer android:layout_width="wrap_content" android:layout_height="wrap_...转载 2018-11-08 18:02:52 · 1209 阅读 · 0 评论 -
Android 控件显示在最上层的方法
两种方法:1.布局中使用FramLayout或RelativeLayout,每个控件都是覆盖显示的,2代码中.view.bringToFront() 。原创 2018-11-15 10:16:30 · 29673 阅读 · 10 评论 -
Android-通过WebView获取html内容
转自:https://blog.youkuaiyun.com/z82367825/article/details/52187921觉得写得很好,转载做自己收藏通过WebView获得某个url的html内容。实现1. 自定义一个Java对象/** * 逻辑处理 * @author linzewu */ final class InJavaScriptLocalOb...转载 2018-11-20 14:06:11 · 16195 阅读 · 6 评论 -
Could not determine artifacts for com.android.support:support-fragment:28.0.0
使用AS创建Activity的时候,出现Could not resolve all dependencies for configuration ‘:publisherTmOffDebugCompileClasspath’.Could not determine artifacts for com.android.support:support-fragment:28.0.0这样的报错信息...原创 2019-01-10 14:01:15 · 11991 阅读 · 1 评论 -
使用ActivityLifecycleCallbacks监听前后台,获取当前Activity
一、ActivityLifecycleCallbacks接口介绍API 14之后,在Application类中,提供了一个应用生命周期回调的注册方法,用来对应用的生命周期进行集中管理,这个接口叫registerActivityLifecycleCallbacks,可以通过它注册自己的ActivityLifeCycleCallback,每一个Activity的生命周期都会回调到这里的对应方法。A...原创 2018-12-31 12:23:49 · 2540 阅读 · 0 评论 -
AndroidStudio 添加依赖三种方式
方法一直接从maven库添加repositories { maven { url '********************' }}dependencies { // Type 1: depend on maven server version implementation '***************************'}方法二在项目的lib添...原创 2019-01-11 17:43:52 · 1640 阅读 · 0 评论 -
Android解决依赖冲突:Program type already present
今天在编译项目时,报错:Program type already present: android.content.pm.IPackageDeleteObserver就是依赖冲突,后来解决就是双击shift,全局查找冲突的这个IPackageDeleteObserve ,发现有两个包都引入了这个,删掉一个包,重新构建就OK了。虽然解决的很简单,但是看到一篇文章特别好,暂时记录一下:And...原创 2019-01-11 17:57:04 · 108037 阅读 · 8 评论 -
Android Studio gradle打包
build生成apk方式1.android sutidio 菜单栏,build-》generate signed apk 随后可以选择编译方式和产品风味2.在android根目录下命令行./gradlew assemble{BuildType} 对应编译方式所有productflavor都会输出./gradlew assemble{productFlavor}{BuildType} 指...原创 2019-01-02 17:45:52 · 277 阅读 · 0 评论 -
Android res/drawable、res/raw、/assets 资源文件区别及获取
文件放在res/drawable、res/raw、/assets下的区别/res 下的文件是受android系统约束的,1、放在这个文件夹下,会被映射生成R文件,即访问时通过R.xx.xxx;2、只能有一层目录,再往底层建文件夹就访问不到了;3、打包时自动只打包用的上的文件,没用上的文件不打包;获取输入流的方式:InputStream in = getResources().openRawRes...原创 2019-01-23 17:40:15 · 3341 阅读 · 0 评论 -
mac环境反编译apk及重打包
使用工具apktool一 首先参照 官网 安装1)右键链接保存脚本文件命名为apktool(txt格式)2)点击链接下载 apktool 最新jar包3)将 2)中下载的jar重命名为apktool.jar4)将下载好的apktool和apktool.jar文件复制到/usr/local/bin文件目录下,如果没有此目录就创建一个sudo mkdir bin //创建,然后...原创 2019-07-02 20:17:17 · 1838 阅读 · 1 评论 -
Notification 踩坑记 —— 动态注册广播响应点击事件
我们知道通知栏可以通过 PendingIntent 设置点击响应(也可以通过 RemoteView设置),如下:Intent intent = new Intent(mContext, NotificationReceiver.class); intent.setAction(NOTIFICATION_BROADCAST_ACTION); ...原创 2019-07-23 20:25:11 · 778 阅读 · 1 评论 -
Android 升级过程
因为某些原因把Android 编译及目标API 升到28 报错:Google material design library error Program type already present: android.support.v4.app.INotificationSideChannelStubStubStubProxy解决:gradle 升到 3.2,support升 andro...原创 2019-08-10 14:23:41 · 399 阅读 · 1 评论 -
android 提示异常:java.lang.RuntimeException: Can't create handler inside thread that has not called
出现此异常,可能是在子线程弹Toast/Dialog或者其他了, 切记,Toast/Dialog只能在UI线程弹出。Android-在子线程中显示Toast和DialogAndroid中有句话说,只能在主线程(UI线程)中更新UI,这是因为Android的主线程(UI线程)是不安全的。所以在子线程如果要显示Toast或者Dialog,我们需要通知主线程来显示 ,有两种方法可以解决此问题:(1...转载 2018-11-06 14:57:29 · 2659 阅读 · 0 评论 -
将图片添加在扇形的中心
Math.toRadians(double angdeg)将角度转换为弧度System.out.println(Math.toRadians(90)); // 1.5707963267948966Math.cos(double a)计算余弦值// 先将60°转换为弧度,再计算其余弦值,60°的余弦值为0.5System.out.println(Math.cos(M...原创 2018-11-01 17:52:58 · 923 阅读 · 0 评论 -
Android 广播机制
1. Android 中的广播可以分为两种类型:标准广播和有序广播标准广播(Normal broadcasts)是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会在同一时刻接收这条广播消息,因此它们之间没有任何先后顺序可言。这种广播的效率会比较高,但同时也意味着它是无法被截断的。有序广播(Ordered broadcasts)则是一种同步执行的广播,在广播发出之后,同一时刻...原创 2018-09-12 15:33:46 · 256 阅读 · 0 评论 -
JNI字段描述符
转自:http://wsjiang.iteye.com/blog/2116902“([Ljava/lang/String;)V” 它是一种对函数返回值和参数的编码。这种编码叫做JNI字段描述符(JavaNative Interface FieldDescriptors)。一个数组int[],就需要表示为这样”[I”。如果多个数组double[][][]就需要表示为这样 “[[[D”。也就是说每...转载 2018-08-30 14:17:42 · 252 阅读 · 0 评论 -
Android 异步消息处理机制
为什么谷歌要提出:“UI更新一定要在UI线程里实现”这一规则呢?原因如下:目的在于提高移动端更新UI的效率和和安全性,以此带来流畅的体验。原因是:Android的UI访问是没有加锁的,多个线程可以同时访问更新操作同一个UI控件。也就是说访问UI的时候,android系统当中的控件都不是线程安全的,这将导致在多线程模式下,当多个线程共同访问更新操作同一个UI控件时容易发生不可控的错误,而这是...原创 2018-08-29 11:32:50 · 405 阅读 · 0 评论 -
Android——OkHttp
1. 添加依赖编辑app/build.gradle 文件,在dependencies 闭包中添加如下内容:implementation 'com.squareup.okhttp3:okhttp:3.4.1'添加依赖会自动下载两个库,一个是OkHttp库,一个是Okio库,后者是前者的通信基础。2. 用法private void sendRequestWithOkHttp...原创 2018-08-24 13:06:31 · 196 阅读 · 0 评论 -
Android——HttpUrlConnection
1. 开发者文档 APIA URLConnection with support for HTTP-specific features. See the spec for details.Uses of this class follow a pattern:Obtain a new HttpURLConnection by calling URL.openConnection() ...原创 2018-08-24 11:35:49 · 1478 阅读 · 0 评论 -
Android——解析JSON数据格式
1. 待解析JSON数据[{&amp;quot;id&amp;quot;:&amp;quot;5&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;5.5&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Clash of Clans&原创 2018-08-24 10:56:11 · 745 阅读 · 0 评论 -
Android——XML解析
1. 待解析XML文件&amp;lt;apps&amp;gt; &amp;lt;app&amp;gt; &amp;lt;id&amp;gt;1&amp;lt;/id&amp;gt; &amp;lt;name&amp;gt;Google Maps&amp;lt;/name&原创 2018-08-24 09:49:01 · 1182 阅读 · 0 评论 -
Android判断当前线程是否为主线程
由于只有主线程有Looper, 可以借助于 Looper. 代码如下:public boolean isMainThread() { return Looper.getMainLooper() == Looper.myLooper();}public boolean isMainThread() { return Looper.getMainLooper().ge...原创 2018-08-30 16:29:14 · 1519 阅读 · 0 评论 -
解决Could not find method android() for arguments问题
从github上面下载项目导入AndroidStudio时,报错: Android studio error:Error:(23, 0) Could not find method android() for arguments on root project 解决: 1. 打开build.gradle(app) 2. 将其中的 android { compileSdkVer...原创 2018-06-20 08:37:48 · 18183 阅读 · 7 评论