Android开发笔记
文章平均质量分 71
主要介绍android开发的一些关键的知识点和经验。
fesng
CSDN年度博客之星和博客专家,毕业长期在一线互联网专注于Android开发以及Android漏洞挖掘研究。
展开
-
Parcelable和Serializable的区别
1.实现Parcelable的实现:writeToParcel(Parcel dest, int f1ags)describeContents()Parcelable.Creator接口的类Serializable的实现:实现Serializable接口serialVersionUID2.原理Parcelable自己实现了序列化和反序列化过程,Serializable是基于反射的操作,生成大量的临时对象,并且伴随着大量的IO操作。3.效率和使用场景不同Parcelable是位于内存上,原创 2020-09-23 23:39:42 · 1500 阅读 · 0 评论 -
安卓invalidate和requestLayout还有postInvalidate的区别
postInvalidate用于非UI线程,Invalidate用于UI线程。另外布局大小和位置没变用Invalidate重绘更高效,如果变了调用requestLayout原创 2020-09-23 23:02:38 · 584 阅读 · 0 评论 -
Retrofit使用总结
Retrofit-一个对Android和Java类型安全的HTTP客户端引言Retrofit把你的HTTP API变成了Java接口public interface GitHubService { @GET("users/{user}/repos") Call<List<Repo>> listRepos(@Path("user") String user);}生成类retrofit生成Gi原创 2017-03-14 21:10:14 · 2061 阅读 · 1 评论 -
深度探究apk安装过程
一.先验知识0.PcakageaManagerService版本变化 1.概述 2.PackageManagerService服务启动流程 3. PackageManagerService入口二.四种安装方式1.系统应用安装2.网络下载应用安装3. ADB工具安装 4.第三方应用安装三.总结概述1.1概述 众所周知,Android应用最终是打包成.apk格式(其实就是一个压缩包),然后原创 2017-03-10 21:50:41 · 6472 阅读 · 4 评论 -
Android源代码下载教程
本文使用的源是清华源,只是介绍repo初始化和下载部分,之前的依赖库的下载,参考官网网址: http://source.android.com/source/downloading.htmlrepo初始化mkdir ~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/原创 2017-03-08 10:30:42 · 1651 阅读 · 0 评论 -
Android应用程序安装过程解析(源码解析)
Android应用程序安装过程解析1.程序安装的4大步骤(1) 拷贝apk文件到指定目录在Android系统中,apk安装文件是会被保存起来的,默认情况下,用户安装的apk首先会被拷贝到 /data/app 目录下。/data/app目录是用户有权限访问的目录,在安装apk的时候会自动选择该目录存放用户安装的文件,而系统出厂的apk文件则被放到了 /system 分区下,包...原创 2017-03-02 15:36:33 · 5847 阅读 · 0 评论 -
Android手机平板根目录详解
Android手机目录详解Android根目录1、mnt 挂载点目录 2、etc 系统主要配置文件 3、system Android 系统文件 4、sys Linux 内核文件 5、proc 运行时文件 6、init.rc 启动脚本 7、default.prop 系统属性配置文件 8、data 用户程序目录原创 2017-03-01 11:43:57 · 8732 阅读 · 0 评论 -
生产者和消费者问题详解
定义生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。该问题描述了共享固定大小缓冲区的两个线程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的原创 2017-02-17 19:25:18 · 5929 阅读 · 0 评论 -
Android线程安全问题总结
线程安全的定义线程安全:如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的,或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题 。Android的单线程模型当一个程序第一次启动的时候原创 2017-02-17 15:52:49 · 7535 阅读 · 0 评论 -
Android VelocityTracker获取滑动速度
官方介绍/** * Helper for tracking the velocity of touch events, for implementing flinging and other such gestures. * Use obtain to retrieve a new instance of the class when you are going to begin tracki原创 2017-02-16 17:50:55 · 4042 阅读 · 0 评论 -
Crashlytics-Android崩溃(crash)统计工具使用教程
Fabric 是一个先进的移动平台平台。 Crashlytics 是Fabric提供的一个崩溃统计分析平台,允许你监控你的应用的状态。如何配置Fabric-Crashlytics第一步改变build.gradle: buildscript { repositories { maven { url 'https://maven.fabric.io/public' } } depen原创 2017-02-14 18:32:02 · 4442 阅读 · 1 评论 -
Android 数据绑定(Data Binding)详解
1.Gradle (Module:app) 配置android { .... dataBinding { enabled = true }}2.数据模型public class Item { public String name; public String description; public Item(String name,原创 2017-02-13 20:09:33 · 1767 阅读 · 0 评论 -
举例说明Android运行时权限用法
运行时权限是API-23时候新加的,允许在运行时动态授予权限废话不多说,直接上代码public static final int MULTIPLE_PERMISSIONS = 10; // code you want.String[] permissions = new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE, M原创 2017-02-13 18:42:16 · 868 阅读 · 0 评论 -
Android-6步教你自定义View
如果你打算完全定制一个View,那么你需要实现View类(所有的Android View都实现于这个类),并且实现确定尺寸的onMeasure(…))方法和确认绘图的onDraw(…))方法。 自定义View一共分为6步第一步public class SmileyView extends View { private Paint mCirclePaint; private Pain原创 2017-02-09 17:00:28 · 1373 阅读 · 0 评论 -
Android常见内存泄漏以及解决办法
1. 注意你的Context引用尝试使用合适的context##(1).Toast能在许多的Activity看到, 使用 getApplicationContext() (2).service经常比activity生命周期长,所以使用如下的代码:Intent myService = new Intent(getApplicationContext(), MyService.class)下图展示了原创 2017-02-09 13:14:12 · 1397 阅读 · 0 评论 -
Android内存泄漏剖析之AsyncTask
泄漏原因一个常见的内存泄漏错误是AsyncTask有Activity或者Fragment的的强引用。错误示例下面是错误的,因为内部类隐式的含有父类的引用,这种情况下,通常是Activity和Fragment的引用。class MyActivity extends Activity { private AsyncTask<Void, Void, Void> myTask = new AsyncT原创 2017-02-09 12:08:12 · 1627 阅读 · 0 评论 -
实现Material Design风格的Button
实现Material Design风格的Button简介The AppCompat Support Library 定义了几个很有用的style,这些Style是基于Widget.AppCompat.Button style实现的。当使用 AppCompat theme主题的时候,Widget.AppCompat.Button style 是默认使用到所有的button上面的。这些样式保证了Butt原创 2017-02-08 16:24:49 · 2799 阅读 · 1 评论 -
Android开发必看-详解Activity之间的数据传递
Activity之间的数据传递Activity单向数据传递下面的;例子演示了从 OriginActivity activity 传递字符串“some data!” 到DestinationActivity activity. 注:这是两个活动之间发送数据的最直接的方法。直接上代码(简单粗暴直接代码示例!)OriginActivitypublic class OriginActivity exte原创 2017-02-08 15:30:53 · 1245 阅读 · 0 评论 -
Android LayoutParams用法解析
ViewGroup.LayoutParams介绍LayoutParams携带了子控件针对父控件的信息,告诉父控件如何放置自己LayoutParams类也只是简单的描述了宽高,宽和高都可以设置成三种值: 1,一个确定的值; 2,FILL_PARENT,即填满(和父容器一样大小); 3,WRAP_CONTENT,即包裹住组件就好。每一个ViewGroup(例如LinearLayout, Relat原创 2017-02-07 18:28:22 · 1844 阅读 · 0 评论 -
Android的WindowManager解析
定义开发者官网的定义 The interface that apps use to talk to the window manager. Use Context.getSystemService(Context.WINDOW_SERVICE) to get one of these.WindowManager介绍Android的WindowManager是一个系统的服务,这是负责管理z-ord原创 2017-02-07 16:23:32 · 1365 阅读 · 1 评论 -
Android Activity状态保存
引用资源的两种方式在java中R.string.app_name 在xml中@string/app_name #突发情况列举点击back键点击锁屏键点击home键其他APP进入前台启动了另一个Activity屏幕方向旋转APP被Kill只有点击back键,onSaveInstanceState方法不会调用。其余的情况下, 该方法一律都会调用,onPause()一定会调用。onSaveInstan原创 2017-01-23 12:04:11 · 1407 阅读 · 0 评论 -
Android横向ListView
在日常开发中经常会发现横向的ListView。下面讨论实现方案。 1.动态的添加布局。RelativeLayout view = (RelativeLayout) LayoutInflater.from(this) .inflate(R.layout.demo, null);ListView.addView(view);2.通过继承AdapterView(ListAdapte原创 2017-01-06 20:15:05 · 10318 阅读 · 1 评论 -
Android适配难题全面总结
支持多种屏幕Android 可在各种具有不同屏幕尺寸和密度的设备上运行。对于 应用,Android 系统在不同设备中提供一致的开发环境, 可以处理大多数工作,将每个应用的用户界面调整为适应其显示的 屏幕。同时,系统提供 API,可用于控制 应用适用于特定屏幕尺寸和密度的 UI,以针对 不同屏幕配置优化 UI 设计。例如,您可能想要不同于手机 UI 的 平板电脑 UI。虽然系统为使您的应用适用于不同的原创 2016-12-05 15:43:03 · 6031 阅读 · 0 评论 -
Android样式(style)和主题(theme)
样式和主题样式是指为 View 或窗口指定外观和格式的属性集合。样式可以指定高度、填充、字体颜色、字号、背景色等许多属性。 样式是在与指定布局的 XML 不同的 XML 资源中进行定义。Android 中的样式与网页设计中层叠样式表的原理类似 — 您可以通过它将设计与内容分离。例如,通过使用样式,您可以将以下布局 XML:<TextView android:layout_width="fil原创 2016-12-04 21:33:23 · 1936 阅读 · 0 评论 -
Android 多窗口详解
多窗口支持Android N 添加了对同时显示多个应用窗口的支持。 在手持设备上,两个应用可以在“分屏”模式中左右并排或上下并排显示。 在电视设备上,应用可以使用“画中画”模式,在用户与另一个应用交互的同时继续播放视频。如果您使用 N Preview SDK 构建应用,则可以配置应用处理多窗口显示的方法。 例如,您可以指定 Activity 的最小允许尺寸。 您还可以禁用应用的多窗口显示,确保系统仅原创 2016-12-04 20:30:40 · 2506 阅读 · 0 评论 -
Android通知Notification全面剖析
通知通知是您可以在应用的常规 UI 外部向用户显示的消息。当您告知系统发出通知时,它将先以图标的形式显示在通知区域中。用户可以打开抽屉式通知栏查看通知的详细信息。 通知区域和抽屉式通知栏均是由系统控制的区域,用户可以随时查看。 图 1. 通知区域中的通知。 图 2. 抽屉式通知栏中的通知。注:除非特别注明,否则本指南均引用版本 4 支持库中的 NotificationCompat.Builder原创 2016-12-02 10:55:33 · 4158 阅读 · 1 评论 -
Android对话框Dialog深度剖析
对话框对话框是提示用户作出决定或输入额外信息的小窗口。 对话框不会填充屏幕,通常用于需要用户采取行动才能继续执行的模式事件。对话框设计Dialog 类是对话框的基类,但您应该避免直接实例化 Dialog,而是使用下列子类之一:AlertDialog此对话框可显示标题、最多三个按钮、可选择项列表或自定义布局。 DatePickerDialog 或 TimePickerDialog 此对话框带有允许原创 2016-12-01 22:52:11 · 2753 阅读 · 0 评论 -
Android输入事件详解
输入事件在 Android 系统中,从用户与应用的交互中截获事件的方法不止一种。如考虑截获用户界面内的事件,则可从用户与之交互的特定视图对象中捕获事件。 为此,View 类提供了多种方法。在您将用于构建布局的各种 View 类中,您可能会注意到几种看起来适用于 UI 事件的公共回调方法。 当该对象上发生相应的操作时,Android 框架会调用这些方法。 例如,在触摸一个视图对象(例如“按钮”)时,对原创 2016-12-01 21:51:38 · 1048 阅读 · 0 评论 -
Android的Spinner控件用法解析
微调框微调框提供一种方法,让用户可以从值集中快速选择一个值。默认状态下,微调框显示其当前所选的值。 触摸微调框可显示下拉菜单,其中列有所有其他可用值,用户可从中选择一个新值。您可以使用 Spinner 对象向您的布局中添加一个微调框。通常应在 XML 布局中使用 元素来执行此操作。 例如:<Spinner android:id="@+id/planets_spinner" andr原创 2016-11-29 15:55:12 · 1495 阅读 · 1 评论 -
Android输入控件详解
输入控件输入控件是您的应用用户界面中的交互式组件。Android 提供了多种可在 UI 中使用的控件,如按钮、文本字段、定位栏、复选框、缩放按钮、切换按钮等。向 UI 中添加输入控件与向 XML 布局中添加 XML 元素一样简单。例如,以下是一个包含文本字段和按钮的布局:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:androi原创 2016-11-29 10:21:00 · 3512 阅读 · 0 评论 -
Android线性布局
线性布局LinearLayout 是一个视图组,用于使所有子视图在单个方向(垂直或水平)保持对齐。 您可以使用 android:orientation 属性指定布局方向。LinearLayout 的所有子视图依次堆叠,因此无论子视图有多宽,垂直列表每行均只有一个子视图,水平列表将只有一行高(最高子视图的高度加上内边距)。 LinearLayout 遵守子视图之间的“边距”以及每个子视图的“重力”(右原创 2016-11-28 22:52:36 · 949 阅读 · 0 评论 -
Android布局概述
布局布局定义用户界面的视觉结构,如Activity或应用小部件的 UI。您可以通过两种方式声明布局:在 XML 中声明 UI 元素。Android 提供了对应于 View 类及其子类的简明 XML 词汇,如用于小部件和布局的词汇; 运行时实例化布局元素。您的应用可以通过编程创建 View 对象和 ViewGroup 对象(并操纵其属性)。 Android 框架让您可以灵活地使用以下一种或两种方法原创 2016-11-28 22:37:23 · 1381 阅读 · 3 评论 -
Android的Ui层次
UI 概览Android 应用中的所有用户界面元素都是使用 View 和 ViewGroup 对象构建而成。View 对象用于在屏幕上绘制可供用户交互的内容。ViewGroup 对象用于储存其他 View(和 ViewGroup)对象,以便定义界面的布局。Android 提供了一系列 View 和 ViewGroup 子类,可为您提供常用输入控件(如按钮和文本字段)和各种布局模式(如线性布局或相对布原创 2016-11-28 22:13:10 · 2376 阅读 · 1 评论 -
Android基础知识点-Manifest清单文件
每个应用的根目录中都必须包含一个 AndroidManifest.xml 文件(且文件名精确无误)。 清单文件向 Android 系统提供应用的必要信息,系统必须具有这些信息方可运行应用的任何代码。清单文件还可执行以下操作:为应用的 Java 软件包命名。软件包名称充当应用的唯一标识符。 描述应用的各个组件,包括构成应用的 Activity、服务、广播接收器和内容提供程序。它还为实现每个组件的类命原创 2016-11-28 21:49:08 · 2680 阅读 · 0 评论 -
Android程序员必须掌握的知识点-多进程和多线程
当某个应用组件启动且该应用没有运行其他任何组件时,Android 系统会使用单个执行线程为应用启动新的 Linux 进程。默认情况下,同一应用的所有组件在相同的进程和线程(称为“主”线程)中运行。 如果某个应用组件启动且该应用已存在进程(因为存在该应用的其他组件),则该组件会在此进程内启动并使用相同的执行线程。 但是,您可以安排应用中的其他组件在单独的进程中运行,并为任何进程创建额外的线程。本文介绍原创 2016-11-27 19:31:37 · 4563 阅读 · 0 评论 -
Android的AIDL机制
Android 接口定义语言 (AIDL)AIDL(Android 接口定义语言)与您可能使用过的其他 IDL 类似。 您可以利用它定义客户端与服务使用进程间通信 (IPC) 进行相互通信时都认可的编程接口。 在 Android 上,一个进程通常无法访问另一个进程的内存。 尽管如此,进程需要将其对象分解成操作系统能够识别的原语,并将对象编组成跨越边界的对象。 编写执行这一编组操作的代码是一项繁琐的工原创 2016-11-23 22:26:25 · 3845 阅读 · 0 评论 -
Android的Intent机制详解
Intent 是一个消息传递对象,您可以使用它从其他应用组件请求操作。尽管 Intent 可以通过多种方式促进组件之间的通信,但其基本用例主要包括以下三个:启动 Activity:Activity 表示应用中的一个屏幕。通过将 Intent 传递给 startActivity(),您可以启动新的 Activity 实例。Intent 描述了要启动的 Activity,并携带了任何必要的数据。 如果原创 2016-11-23 20:15:04 · 5247 阅读 · 1 评论 -
Android新特性Instant Run详解
关于 Instant RunAndroid Studio 2.0 中引入的 Instant Run 是 Run 和 Debug 命令的行为,可以大幅缩短应用更新的时间。尽管首次构建可能需要花费较长的时间,Instant Run 在向应用推送后续更新时则无需构建新的 APK,因此,这样可以更快地看到更改。仅在您部署调试构建变体、使用 Android Plugin for Gradle 版本 2.0原创 2016-11-23 17:28:20 · 3253 阅读 · 0 评论 -
Android开发使用Java8新特性
Android 支持所有 Java 7 语言功能,以及一部分 Java 8 语言功能(具体因平台版本而异)。本文介绍您可以使用的新语言功能、如何正确配置项目以使用这些功能,以及您可能遇到的任何已知问题。注:在为 Android 开发应用时,可以选择使用 Java 8 语言功能。您可以将项目的源和目标兼容性值保留为 Java 7,但仍须使用 JDK 8 进行编译。支持 Java 8 语言功能需要一个名原创 2016-11-23 16:50:09 · 7898 阅读 · 1 评论 -
Android App之间通过Intent交互
Android 最重要的功能之一是应用能够基于它要执行的“操作”向另一个应用发送用户。 例如,如果您的应用有您要在地图上显示的公司地址,您无需在显示地图的应用中构建 Activity。 而是可以创建使用 Intent 查看地址的请求。Android 系统之后启动可以在地图上显示该地址的应用。用 Intent 在自己应用中的 Activity 之间进行导航。 您通常使用显式 Intent 执行此操作,原创 2016-11-14 22:42:07 · 2422 阅读 · 0 评论