
Android
文章平均质量分 67
狗剩Ein
“坚持”本身就值得称赞
展开
-
Activity被销毁后重新创建的数据存储和恢复
一、生命周期一个Activity正常的生命周期应该是:onCreate→onStart→onResume→onPause→onStop→onDestroy以及还有一个onRestart方法会在Activity再次可见时调用:onStop→onRestart→onStart然而Activity可能会在系统配置发生改变以及内存不足的情况下被杀死,这时系统会调用onSaveInsta...原创 2018-09-12 19:58:52 · 846 阅读 · 0 评论 -
对象序列化
写在前面:关于序列化的概念我曾在《Intent传递数据》这篇博文中第一次使用到,但是我并没有对它进行讲解,只是为了传递对象而直接使用了它。因此在这里有必要简单地说下何为序列化。Serializable接口在传递对象的时候,我们让对象去实现了一个Serializable接口,但是如果我们点开这个接口呢,就会发现它其实是个空的接口。实际上,仅仅实现Serializable接口虽然可行但不完...原创 2018-09-15 18:02:24 · 231 阅读 · 0 评论 -
Android学习笔记之全局获取Context
1.因为想要全局都能获取到Context,那么第一个想到的就是Application了,因此我们需要新建一个自定义的Application类去继承Application。public class MyApplication extends Application2.然后在其onCreate()的时候去初始化成员变量Context的值,并且提供一个静态方法用来获取Contextpub...原创 2018-09-03 16:06:58 · 288 阅读 · 0 评论 -
生成APK
使用Gradle生成apk文件1.在gradle.properties文件中添加如下内容:KEY_PATH=D\:\\Documents\\ein.jksKEY_PASS=1234567ALIAS_NAME=EinALIAS_PASS=1234567其中从上至下依次为签名keystore文件的路径,密码,别名,别名密码。2.编辑app/build.gradle文件,在and...原创 2018-09-11 20:37:47 · 398 阅读 · 0 评论 -
Android学习笔记之系统状态栏、导航栏透明化
系统状态栏、导航栏透明化 1.在需要将系统状态栏透明化的活动中添加如下代码:@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //系统状态栏透明化需要Android 5.0以上系统支持 if (Build.VERSIO...原创 2018-09-07 19:48:18 · 353 阅读 · 0 评论 -
Android学习笔记之定时任务
使用Alarm类来实现定时任务在Java中我们是通过Timer类来实现定时任务的,但是Android手机会在长时间不操作的情况下自动让cpu进入到睡眠状态,从而延长待机时间,这样一来就有可能导致Timer类的定时任务无法正常运行。而Alarm则具有唤醒cpu的功能。1.获取AlarmManager的实例AlarmManager alarmManager = (AlarmManager...原创 2018-09-04 16:29:12 · 459 阅读 · 0 评论 -
Android中的矩阵(Matrix)变换
写在前面:本篇博文将结合一个简单的Demo,讲解一下如何通过Matrix实现对Bitmap对象的一些简单处理,例如平移,旋转,放缩等。此外还会讲解一下矩阵乘法中的左乘右乘在Android中的代码实现。一、Matrix类这里说的Matrix类是位于"android.graphics.Matrix"包下的。它是Android提供的一个矩阵工具类,它本身不能对图像或View进行变换,但它可与...原创 2018-08-29 19:48:07 · 3126 阅读 · 0 评论 -
Android学习笔记之Toolbar
一、Toolbar的简单使用1.因为Toolbar的出现是来替代原先的ActionBar的,因此在使用它之前应该将ActionBar隐藏掉。如果我们没有更改过主题的设置,那么在AndroidManifest.xml文件中的application的theme属性值应该为AppTheme:<application android:allowBackup="true" a...原创 2018-08-25 14:31:34 · 283 阅读 · 0 评论 -
引用资源时?和@的区别
参考博文:https://blog.youkuaiyun.com/RichieZhu/article/details/52490521https://blog.youkuaiyun.com/xx326664162/article/details/64125654引用资源时,可能遇到下列情况,例如在设置style的时候可以使用“@”引用也可以使用“?”引用 style="?android:attr/pro...原创 2018-08-24 21:00:02 · 594 阅读 · 0 评论 -
异步消息处理机制之AsyncTask
一、什么是AsyncTask在之前的文章异步消息处理机制学习笔记中有简单介绍Android的异步消息处理机制,但实际运用上,Android提供了更加好用的工具——AsyncTask。AsyncTask背后的实现原理也是基于异步消息处理机制的,只是Android帮我们做了很好的封装而已,其主要功能还是完成了子线程和主线程之间的消息传递。二、AsyncTask的基本用法1.AsyncTas...原创 2018-08-21 20:25:59 · 414 阅读 · 0 评论 -
Android学习笔记之CoordinatorLayout与AppBarLayout
在上一篇文章《可交互提示学习笔记》中可能会遇到这种问题:弹出的Snackbar遮挡了手机底部的内容,这种情况我们可以通过CoordinatorLayout使内容随Snackbar的弹出而上移,以确保不会被Snackbar遮挡到<android.support.design.widget.CoordinatorLayout android:layout_width="match_...原创 2018-08-31 18:00:44 · 461 阅读 · 0 评论 -
Activity的四种启动模式
standard这是一种标准模式,也是系统默认的Activity启动模式。每当启动一个Activity时,不管之前这个实例是否已经存在,都会重新创建一个新的实例。这是一种典型的多实例实现,一个任务栈中可以有多个该实例,每个实例也可以属于不同的任务栈。在这种模式下,谁启动了这个Activity,那么这个Activity就会运行在启动它的那个Activity所在的栈中。比如现在有一个Activit...原创 2018-09-13 17:58:49 · 268 阅读 · 0 评论 -
Android学习笔记之IPC
目录一、IPC的基本概念二、IPC的几种方式1.使用Bundle传输2.通过共享文件读写数据3.使用Messenger传输4.使用AIDL传输4.1.什么是AIDL4.2.使用AIDL文件的注意事项4.3.使用AIDL的注意事项4.4.使用AIDL实现IPC5.使用ContentProvider 一、IPC的基本概念所谓IPC,是Inter-Pr...原创 2018-09-19 17:54:07 · 290 阅读 · 0 评论 -
Android学习笔记之IntentService
IntentServiceIntentService 是一种特殊的Service,它是继承了Service的抽象类, 因此在使用它的时候,需要先创建它的子类。它通常用于执行一些高优先级的后台任务,并且当任务执行结束后它会自动停止。在实现上,它封装了 HandlerThread 和 Handler。HandlerThread它是Thread的子类,是一种可以使用Handler的Thre...原创 2018-12-07 19:35:04 · 297 阅读 · 0 评论 -
Android学习笔记之动画(二)——属性动画
属性动画属性动画是从Android 3.0 开始引入的新特性,和View动画不同,它可以对任何对象做动画,甚至可以没有对象(ValueAnimator)除此之外,属性动画通过ValueAnimator、ObjectAnimator和AnimatorSet 等概念,可以实现比View动画要丰富得多的动画效果。在Android 3.0之前的版本可以采用开源动画库nineoldandroids来...原创 2018-11-19 20:21:21 · 326 阅读 · 0 评论 -
Android学习笔记之动画(一)——View动画
一、动画的分类Android 的动画可以大致分为三种:View动画,帧动画,属性动画,其实帧动画也可以归类为View动画,只是它和常见的View动画(比如平移、旋转等)表现形式上略有不同而已。View 动画:它是一种渐进式动画。View动画通过对场景里的对象进行不断地图像变化从而产生动画效果。 帧动画:通过有序的播放一系列图像从而产生动画的效果,值得注意的是图片过多过大会导致OOM。 ...原创 2018-11-16 17:13:47 · 286 阅读 · 0 评论 -
Android学习笔记之RemoteViews的内部机制
什么是RemoteViewsRemoteViews 是一个远程 View,所谓的远程指的是这个 View 显示在其他的进程中(在该应用程序的进程之外),最常见的用法是显示在 SystemServer 进程中,例如通知栏的自定义 View 以及桌面小部件。同时,RemoteViews 表示的是一个 View 结构,它提供了一组基础的操作(set方法)用于跨进程更新它的界面。RemoteVie...原创 2018-11-06 20:40:43 · 402 阅读 · 0 评论 -
Android学习笔记之桌面小工具AppWidget
实现桌面小工具的关键类AppWidgProviderAppWidgetProvider的本质是一个广播接收者,如下:public class AppWidgetProvider extends BroadcastReceiver 说道广播接收者,那么它的工作原理应该是接收到对应的广播后会去调用其onReceive方法。接下来就来看它的onReceive方法:public voi...原创 2018-11-06 19:37:04 · 533 阅读 · 0 评论 -
Android学习笔记之自定义View
一、自定义View的分类1.1.继承 View这种方法主要用于实现一些不规则的效果(不方便通过布局的组合方式来实现),比如静态或动态地显示一些不规则的图形(因此需要重写onDraw方法)。值得注意的是,继承View的自定义View需要自己制定 wrap_content 的尺寸,并且需要自己处理padding属性。1.2.继承 ViewGroup这种方法主要用于实现自定义布局,当某种...原创 2018-10-24 19:56:48 · 244 阅读 · 0 评论 -
Android学习笔记之View的绘制流程(二)——layout、draw过程
一、layout过程layout过程的作用是确定View的最终宽高和四个顶点的位置。其传递过程与measure类似,首先在layout方法中确定ViewGroup的位置后,再去调用onLayout方法,然后在onLayout中遍历所有子元素并调用其layout方法,从而完成layout过程的传递。不同的是,在measure过程中普通的View(不是ViewGroup)的measure过程是一直...原创 2018-10-10 15:57:24 · 290 阅读 · 0 评论 -
Android学习笔记之View的事件分发机制
一、点击事件的传递规则所谓的点击事件分发过程,其实就是当我们点击屏幕,产生了一个MotionEvent之后,系统将这个事件传递给一个具体View的过程。总的来说,事件总是先传递给Activity,然后传递给Window,再传递给顶级View(Activity→Window→DecorView),最后再按照事件分发机制一层一层向下去分发事件。而这个分发过程由三个很重要的方法来共同完成:dis...原创 2018-10-17 21:16:46 · 297 阅读 · 0 评论 -
Android学习笔记之View的绘制流程(一)——measure过程
一句话总结:View的绘制流程是从ViewRoot (ViewRootImpl)的 performTraversals方法开始,经过measure,layout,draw 三个过程才能最终将一个View绘制出来。其中measure用来测量View的宽高,layout用来确定View在父容器中的放置位置,draw用来将View绘制到屏幕上。再说细点,当界面强制重绘调用了View的requestL...原创 2018-10-06 11:46:47 · 331 阅读 · 0 评论 -
Android学习笔记之MeasureSpec
什么是MeasureSpecAndroid系统在绘制View的时候,过程是十分复杂的,其中频繁的使用到了MeasureSpec。那么MeasureSpec是什么?有什么用?简单点说,它是一个int值的中间变量,用来存储View的尺寸规格。再说细点,在测量过程中,系统会将View的LayoutParams根据父容器所施加的约束规则转换成对应的MeasureSpec。MeasureSpec代表...原创 2018-10-05 15:48:05 · 423 阅读 · 0 评论 -
使用AIDL的进阶知识点
提醒:这篇博文是基于上一篇《学习笔记之IPC》中的AIDL的,如果还不清楚AIDL的基础用法,建议先去阅读它的AIDL部分在AIDL中使用观察者模式在上篇博文中,我们实现了一个简单的图书馆(服务端),然后用户(客户端)可以查询所有书籍,并请求添加书籍。现在我们想为其应用观察者模式,让用户成为观察者,每当图书馆有新书到店时,用户就收到新书的消息。1.首先我们应该定义客户端使用的监听器,有...原创 2018-09-20 14:42:00 · 293 阅读 · 0 评论 -
Android学习笔记之滑动菜单
一、DrawerLayout的简单使用1.DrawerLayout是一个布局,它允许在布局中放入两个直接子控件,第一个子控件就是主屏幕中的内容,第二个子控件就是滑动菜单中显示的内容。其中第二个子控件必须设置layout_gravity属性,它表示滑动菜单在屏幕的左边还是右边。<android.support.v4.widget.DrawerLayout xmlns:andr...原创 2018-08-28 16:41:19 · 320 阅读 · 0 评论 -
Android学习笔记之Service
一、服务的基本概念1.服务是Android中实现程序后台运行的解决方案,它非常适合去执行那些不需要和用户交互而且要长时间运行的任务。2.服务虽然不依赖于任何UI界面,但它依赖于创建服务时所在的应用程序进程。当某个应用程序进程被杀掉时,所有依赖于该进程的服务也会停止。3.虽然服务运行在后台,但服务并不会自动开启线程,所有代码都是默认运行在主线程中的。换言之,如果我们没有在服务内部手动创建...原创 2018-08-20 17:32:51 · 351 阅读 · 0 评论 -
Android学习笔记之RecyclerView
写在前面:想要让RecyclerView向下兼容,需要在app/build.gradle中添加库:implementation 'com.android.support:recyclerview-v7:27.1.1'一、通过RecyclerView实现纵向滚动(像ListView那样)1.在布局文件中引入RecyclerView控件<android.support.v...原创 2018-07-27 15:40:36 · 251 阅读 · 0 评论 -
使用Intent实现Activity之间的跳转和数据传递
一、Intent显示跳转//显示Intent跳转ActivityIntent intent = new Intent(FirstActivity.this,SecondActivity.class);startActivity(intent);第一个参数类型为context,是一个作为上下文的环境参数。第二个参数类型为class,是我们要打开的目的Activity。二、Inte...原创 2018-07-19 19:07:18 · 9262 阅读 · 0 评论 -
在Activity中使用Menu
一、新建菜单的资源文件在app/src/main/res/menu/路径下新建一个Menu resource file,这是一个xml文件。然后编辑该xml文件<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android...原创 2018-07-19 13:12:47 · 1372 阅读 · 0 评论 -
Android学习笔记之build.gradle
AndroidStudio是采用Gradle来构建项目的。gradle使用了一种基于Groovy的领域特定语音(DSL)来声明项目设置,摒弃了传统的基于XML的繁琐配置(例如:用Ant来构建项目)。用AS创建一个项目之后,会看到有两个build.gradle文件。一个是在最外层目录下的,一个是在app目录下的。最外层目录下的build.gradle文件结构如下:buildscript...原创 2018-07-17 17:40:09 · 235 阅读 · 0 评论 -
Android学习笔记之BroadcastReceiver
一、BroadcastReceiver的动态注册方法1.新建一个广播接收者的类去继承BroadcastReceiver,重写其onReceive方法class NetworkChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent ...原创 2018-08-03 23:37:54 · 309 阅读 · 0 评论 -
Android学习笔记之运行时权限
一、什么是运行时权限Android的运行时权限是在6.0系统中加入的权限功能。在此之前,一款应用程序的权限申请以列表的形式呈现在安装过程中,如果用户不认可该应用申请的权限,那么拒绝安装就可以了。而运行时权限,是在应用程序使用过程中再对某一项权限进行授权。即使用户拒绝了其中某个授权申请,仍然可以使用这个应用程序的其他功能,而不是像以前那样无法安装它。PS:https://developer....原创 2018-08-09 21:09:16 · 352 阅读 · 0 评论 -
Android学习笔记之可交互提示
可交互提示SnackbarSnackbar也是Design Support库提供的工具,它是一种提示工具,但它并不是Toast的替代品,两者有着不同的应用场景。Snackbar在Toast的基础上扩展,在告诉用户现在发生了什么事情的同时,还提供了一个可交互按钮,当用户点击按钮时可以执行一些额外的逻辑操作。例如删除数据时,弹出Snackbar可以提供一个Undo按钮,从而防止用户的误操作。1...原创 2018-08-30 17:47:28 · 297 阅读 · 0 评论 -
Android学习笔记之悬浮按钮
悬浮按钮FloatingActionButton悬浮按钮是Design Support库中提供的一个控件,这个控件可以帮助我们轻松地实现悬浮按钮的效果。1.在app/build.gradle中添加design库的依赖implementation 'com.android.support:design:27.1.1'2.在布局文件中使用悬浮按钮<android.supp...原创 2018-08-30 17:08:29 · 1033 阅读 · 0 评论 -
解析JSON数据
写在前面:测试的时候我申请了一个查询快递的接口,其返回的JSON数据示例如下:{ "resultcode": "200", /* 老版状态码,新用户请忽略此字段 */ "reason": "查询物流信息成功", "result": { "company": "EMS", /* 快递公司名字 */ "com": &原创 2018-08-16 19:11:10 · 424 阅读 · 0 评论 -
解析XML数据
写在前面:测试的时候我申请了一个查询快递的接口,其返回的xml数据示例如下:<root> <resultcode>200</resultcode> <reason>查询成功!</reason> <result> <company>顺丰</company> &原创 2018-08-16 16:25:49 · 828 阅读 · 0 评论 -
Android学习笔记之消息处理机制
一、消息处理机制的四个组成部分Android中的消息处理机制主要由四个部分组成:Message、Handler、MessageQueue 和 Looper。1.MessageMessage用于在线程之间传递消息,它可以在内部携带少量的信息。我们常用Message的what字段以及arg1、arg2字段来携带一些整型数据,使用Message的obj字段来携带一个Object对象。2....原创 2018-08-18 10:58:01 · 430 阅读 · 0 评论 -
Android学习笔记之数据存储
一、文件存储1.1.将数据存储到文件中1.运用java的io流将数据写入到手机文件中/** * 保存数据到文件 * */public void save(String data){ FileOutputStream out = null; BufferedWriter writer = null; try { //第一个参数为文件名,第二...原创 2018-08-08 17:24:37 · 258 阅读 · 0 评论 -
Android学习笔记之使用HTTP协议访问网络
一、使用HttpURLConnection1.通过URL的openConnection()方法获取一个HttpURLConnection对象URL url = new URL(mURL);HttpURLConnection connection = (HttpURLConnection) url.openConnection();2.设置请求网络的方式//设置请求类型为GET...原创 2018-08-15 20:19:37 · 460 阅读 · 0 评论 -
Android学习笔记之ContentProvider
一、创建自己的ContentProvider1.新建一个自定义的Provider去继承ContentProvider类public class DatabaseProvider extends ContentProvider2.打开AndroidManifest.xml文件,对自定义的Provider进行如下配置:<provider android:name="....原创 2018-08-11 17:10:58 · 247 阅读 · 0 评论