3 忙碌的咖啡

尚未进行身份认证

进击的菜鸟

等级
TA的排名 27w+

JVM笔记—运行时区域数据

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁时间,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束而创建和销毁。程序计数器程序计数器是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一...

2018-09-06 18:22:37

第一个Flutter APP

创建FlutterApp创建一个新的Flutter项目,项目会默认自带一个示例,编辑lib/main.dart的代码删除main.dart文件中的代码,替换为以下代码,然后运行import'package:flutter/material.dart';voidmain()=>runApp(newMyApp());classMyAppextendsSt...

2018-09-04 09:47:12

Flutter环境搭建

环境安装获取FlutterSDKgitclone-bbetahttps://github.com/flutter/flutter.gitexportPUB_HOSTED_URL=https://pub.flutter-io.cn//国内用户需要设置exportFLUTTER_STORAGE_BASE_URL=https://storage.flutter-io....

2018-09-04 09:46:38

Flutter Widget框架概述

介绍FlutterWidget采用现代响应式框架构建,中心思想是用widget构建你的UI。Widget描述了他们的视图在给定其当前配置和状态时看起来像什么。当widget的状态发生变化时,widget会重新构建UI,Flutter会对比前后变化的不同,以确定底层渲染树从一个状态转换到下一个状态所需的最小更改。基础WidgetFlutter有一套丰富的基础widget。Te...

2018-09-04 09:45:26

Android笔记—Activity启动模式

默认情况下,我们多次启动同一Activity的时候,系统会多次创建实例并一一放入到任务栈中,Android也提供启动模式来修改这种默认的行为。LaunchModestandard标准模式。Activity默认的启动方式,在这种启动方式下每次启动Activity系统都会重新创建实例并放入到任务栈中,被创建的Activity会进行正常的生命周期回调。当我们用ApplicationCon...

2018-07-11 17:31:29

EventBus—订阅者索引

订阅者索引订阅者索引是EventBus3的新功能,它是一种可选择的优化,用来加快初始订阅者的注册。可以使用EventBus注解处理器在编译期内创建订阅者索引文件,虽然不强制使用索引,但是在Android上推荐使用以便获得最好的性能。索引前提请注意:只有用@Subscribe注解的方法才能被编入索引,同时,Subscriber类和事件类必须是public。此外,由于Java注解本身...

2018-07-09 15:00:25

Android进阶之路 —EventBus源码解析

EventBus是基于发布/订阅的开源框架,主要用于组件之间的通信,下面会从三个点对EventBus的源码进行分析(1)register(Objectsubscriber)被通知类的注册使用EventBus时我们首先会在需要被通知的类中去进行注册,现在看一下register()里面做了什么事。publicvoidregister(Objectsubscriber)...

2018-06-08 17:58:56

Tomcat通过不同的端口去访问不同的Web资源

在开发中遇到过这样一种需求:客户端希望通过8080端口访问的是一种资源,而通过8089访问的是另一种资源,在只使用一个Tomcat的情况下我们需要怎么做呢?一提到端口,我们自然而然的就想到了Tomcat的conf目录下的server.xml,我们先来看看里面的内容:<?xmlversion='1.0'encoding='utf-8'?><!-...

2018-04-24 13:57:29

Fragment管理工具类

分享一个之前项目自己写的一个Fragment切换工具类首先是工具类的代码,工具类封装了Fragment的切换,添加、销毁、状态保存等方法publicclassFragmentTabManager{privateContextmContext;privateFragmentManagermFragmentManager;privatein...

2018-04-24 13:54:41

使用DownloadManager进行应用下载

最近在做公司的应用下载功能,使用到的是系统提供的DownloadManager,正好抽时间做成一个模块。关于DownloadManager先来看一段官方的介绍:Thedownloadmanagerisasystemservicethathandleslong-runningHTTPdownloads.Clientsmayrequestthata...

2018-04-20 17:24:54

7.0—AsyncTask源码分析

AsyncTask源码分析之前开发中经常使用AsyncTask进行异步数据获取,当时只限于使用,只知道大体的就是通过线程池+handler实现的封装,具体的代码细节没有仔细看过,今天就阅读一下源码,当作笔记。加深记忆构造函数publicAsyncTask(){mWorker=newWorkerRunnable<Params,Result>(){

2017-03-15 12:56:38

使用自定义Camera实现简单拍照功能

闲来无事,就把之前用自定义Camera实现的简单拍照功能记录一下。Camera类在5.0以后不推荐使用了,取而代之的是android.hardware.camera2包下的类,本文使用Camera。我们首先自定义一个View去继承SurfaceView:publicclassCameraSurfaceViewextendsSurfaceViewimplementsSurfaceH

2017-03-14 12:50:52

Retrofit自定义Converter数据异常处理攻略

开发中客户端时常与服务端打交道,客户端请求参数到服务端,服务端返回响应数据到客户端,开发中用的比较多的就是Json数据传递,从请求到响应的步骤一般是约定数据格式,响应数据进行关系映射,然后对错误数据进行异常处理。数据格式一个比较良好的的响应数据应该具备响应码、数据状态描述、具体的响应数据{“message”:“正常”,“responsecode”:0,

2017-03-07 19:40:06

算法基础——快速排序

快速排序的基本思想:快速排序是对冒泡排序的一种改进,它的基本思想是:将一组数列分成独立的两部分,其中一部分的数据比另一部分的数据都要小,然后按照这个方法在这两部分中进行排序。为了理解方便,我们直接上图吧。首先我们需要给一群高矮不同的人排队,如下图:首先我们需要将这一群人划分为两部分,其中左半部分所有人的身高都比右半部分人的身高低,我们让一号位出列作为划分队伍的基准身高,然后让五号位出列互相比

2017-02-15 13:06:34

算法基础——冒泡排序

冒泡排序的基本思想冒泡排序是一种交换排序,它的基本思想是:相邻的两两元素互相比较,如果是反序则位置交换,直到没有反序为止。举一个比较通俗的例子:小时候我们都经历过高矮个排队,如果在排队的过程中我们使用冒泡排序的话,首先第一个同学会与他右边的同学比较身高,如果比右边高的话则两个人互换顺序,矮的话则保持不动,之后第二个位置的同学与他右边的同学比较,如此重复,如果有N个同学的话则第一趟排序需要进行N-1次

2017-02-14 17:15:58

浅谈Activity的生命周期

浅谈Activity的生命周期Activity作为四大组件之一,是在平时开发中使用最为频繁的一个组件,了解Activity的生命周期有助于我们更好地去优化用户体验。-Activity的生命周期图一般情况下,Activity会经历的生命周期:onCreateActivity的创建,是生命周期中的一个方法,在这个方法中我们可以做一些初始化的工作,比如加载我们的布局。onStart

2016-11-13 11:52:35
勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!