自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 收藏
  • 关注

原创 Android性能优化之电量优化

移动设备中最耗电的硬件是屏幕、无线信号(蜂窝,WI-FI,蓝牙和GPS)、CPU(在高速处理下)和传感器。无线设备:若app需要使用无线传输,最好的性能提升方式是一次下载尽可能多的数据,然后关闭无线设备,减少请求次数是一个一举两得的方法,不仅可以提升屏幕的加载速度,也可以节省电量。传感器:当注册一个传感器之后,可以使用getpower()方法来获取传感器消耗的电量。当Android设备空闲时...

2019-12-31 20:40:03 403 1

原创 Android性能优化之安装包性能优化

参考地址:https://www.cnblogs.com/Oztaking/p/9418445.html

2019-12-31 11:16:19 117

原创 Android开源框架之EventBus

EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求都可以通过EventBus实现。简单地说:就是可以将某个页面想要传递的信息(例如在目标页面的textview中显示“hello...

2019-12-30 19:57:08 182

原创 Android性能优化之网络优化

本文讲解如何通过缓存来实现网络优化。Demo:MainActivity:package com.dn.networkcache;import java.io.BufferedReader;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.io.InputStr...

2019-12-30 00:11:45 133

原创 Android性能优化之数据传输效率优化

一般地,数据传输大都是用数据的序列化和反序列化来完成的(即服务器对象Object----流—>客户端Object对象)这样传输的过程中需要花费大量的时间来解析数据。这里介绍一个基于二进制文件来进行传输的方式——FlatBuffers。这种方式只需要把byte数据加载到内存中即可,不需要像json那样进行序列化与反序列化,大大节约了传输的时间。FlatBuffers的使用方法:首先按照使用...

2019-12-29 18:42:17 336

原创 Android性能优化之热修复

热修复分为两种:阿里系:从底层C的二进制来入手的。腾讯系:从Java类加载机制来入手的。什么是热修复?一般的bug修复,都是等下一个版本解决,然后发布新的apk。热修复:可以直接在客户已经安装的app当中修复bug。本文采用Java类加载机制来实现热修复实现原理:Android的类加载器在加载一个类时会先从自身的DexPathList对象种的Element数组种获取(Elemen...

2019-12-28 21:13:26 159

原创 Android性能优化之提升应用的启动速度

1.应用启动的两种方式冷启动:当直接从桌面上直接启动,同时后台没有该进程的缓存,这个时候系统就需要,重新创建一个新的进程并且分配各种资源。热启动:该app后台有该进程的缓存,这时候启动的进程就属于热启动。热启动不需要重新分配进程,也不会Application了,直接走的就是app的Activity,这样就速度快很多2.如何测量一个应用的启动时间在命令行窗口使用命令行来启动app,同时...

2019-12-26 12:16:18 314

原创 Android性能优化之Service调优

昨天面试问到了用服务保持唤醒这块内容,忘记了这方面的知识没能答得上来,翻开笔记本回顾一下,这篇博客就当作复习吧!Service:是一个后台服务,专门用来处理常驻后台的工作组件(为核心服务专门开一个进程,跟其他的后台操作隔离)一、进程的重要性优先级:(越往后的就越容易被系统杀死)1.前台进程;Foreground process1)用户正在交互的Activity(onResume())2)...

2019-12-24 20:57:20 447

原创 Android高级UI之事件传递之2(源码分析)

1.Activity对点击事件的分发过程public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { onUserInteraction(); } if (getWindow().su...

2019-12-24 00:29:41 167

原创 Android高级UI之事件传递之1

点击事件的传递规则在介绍点击事件的传递规则之前,首先要明白这里分析的对象是MotionEvent,即点击事件。所谓的事件分发,其实就是对MotionEvent事件的分发过程,即当一个MotionEvent产生以后,系统需要把这个事件传递给一个具体的View,而这个传递的过程就是分发过程。点击事件的分发过程有三个重要的方法共同完成:dispatchTouchEvent,onInterceptT...

2019-12-22 02:17:16 184

原创 数据结构之复杂度分析(学习笔记)

本文仅供学习参考使用。数据结构和算法本身解决的是“快”和“省”的问题,即如何让代码运行得更快,如何让代码更省存储空间。所以,执行效率是算法一个非常重要的考量 指标。那如何来衡量你编写的算法代码的执行效率呢?时间、空间复杂度分析大O表示法几种常见的时间复杂度空间复杂度时间复杂度的全称是渐进时间复杂度,表示算法的执行时间与数据规模之间的增长关系。类比一下,空间复杂度全称就是渐进空...

2019-12-15 15:30:55 213

原创 AndroidUI绘制流程实例2(继承ViewGroup)

案例仅供参考学习。MainActivity:package com.example.test;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;public class MainActivity extends Act...

2019-12-15 14:20:45 408

原创 AndroidUI绘制流程实例

本文参考了《Android开发艺术探究》。measure流程系统内部是通过MeasureSpec来进行View的测量,但是正常情况下我们使用View指定的MeasureSpec,尽管如此,但是我们可以给View设置LayoutParams。在View测量的时候,系统会将LayoutParams在父容器的约束下转换成对应的MeasureSpec,然后再根据这个MeasureSpec来确定Vie...

2019-12-13 21:44:47 105

原创 AndroidUI绘制流程笔记

一、从setContentView(R.layout.activity_main);入手了解UI的绘制起始过程1.Activity.javapublic void setContentView(@LayoutRes int layoutResID) { getWindow().setContentView(layoutResID);//① initWindowD...

2019-12-10 21:26:05 156

原创 Android高级UI绘制之Snackbar

MaterialDesign_SnackbarSnackbar的提出实际上是界于Toast和Dialog的中间产物。Toast: 用户无法交互;Dialog:用户可以交互,但是体验会打折扣,会阻断用户的连贯性操作;Snackbar既可以做到轻量级的用户提醒效果,又可以有交互的功能(必须是一种非必须的操作)。MainActivity:package com.example.dell.my...

2019-12-10 20:21:24 332

原创 Android高级ui绘制之Palette

MaterialDesign_PalettePalette:可以在一张图片里面分析出一些色彩特性:主色调、鲜艳的颜色、柔和颜色等等……Activity:import android.graphics.Bitmap;import android.graphics.Color;import android.graphics.drawable.BitmapDrawable;import a...

2019-12-10 19:52:01 155

原创 设计模式之单例模式

单例模式本文参考了《Android源码设计模式解析与实战》。定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。使用场景:确保某个类有且只有一个对象地场景,避免产生多个对象消耗过多地资源,或者某种类型地对象只应该有且只有一个。例如,创建一个对象需要消耗的资源过多,如要访问IO和数据库等资源,这时就要考虑使用单例模式。单例模式有很多实现方式,但是不管哪种实现方式它们的核心...

2019-12-10 17:34:22 243

原创 设计模式之代理模式(Proxy Pattern)

Proxy Pattern本文参考了《Android源码设计模式解析与实战》。代理案例:每天吃饭赶进度叫公司的同事帮忙买饭;辞职老板不给你发工资,请律师帮忙打官司。定义:首先自己要做什么事,要先定义好(就是方法要在该类中实现好),代理类只是调用了该类的方法而已。种类:静态代理:代理类的代码由程序员自己或通过一些自动化工具生成固定的代码再对其进行编译,也就是说代码运行前代理类的class编...

2019-12-10 01:18:01 112

原创 Android高级UI绘制之NavigationView

NavigationView谷歌在侧滑的MaterialDesign的一种规范,所以提出了一个新的控件,用来规范侧滑的基本样式。注意:使用NavigationView,需要依赖项目:Design项目。同时还需要依赖recyclerView项目和CardView项目MainActivity:package com.example.dell.myapplication;import and...

2019-12-09 18:10:02 180

原创 Android高级UI绘制之TextInputLayout

MaterialDesign_TextInputLayoutMainActivity:package com.example.dell.myapplication;import android.app.Activity;import android.os.Bundle;import android.support.design.widget.TextInputLayout;impor...

2019-12-09 17:07:43 126

原创 SSL安全通信

SSL安全通信本文参考了《java网络编程案例教程》这本书,后文所附的源代码仅供学习参考使用。安全套接字(SSL)是由NetScape公司开发设计的互联网安全通信协议,广泛应用于web浏览器与web服务器之间的安全通信。用户每次在网上下单购物或者登录电子银行,其交易细节都自动进行了一些SSL加密和认证。SSL协议在网络交换中的逻辑地位介于TCP传输层与应用层之间。SSL/TLS协议的基...

2019-12-09 15:51:33 731

原创 Java网络编程之非阻塞I/O

非阻塞I/O本文参考了《Java网络编程案例》,若有错误的地方欢迎指出。非阻塞I/O在编程逻辑上与阻塞I/O一致,只是把Socket、ServerSocket换成了对应的通道Java基本I/O都是阻塞I/O,例如通过Socket来读数据,调用readLine()方法之后,如果没有数据到达,当前线程就会一直阻塞在readLine()方法中,直到有数据或者数据源关闭才返回。如果采用非阻塞I/O,...

2019-12-08 20:40:13 607

原创 数据结构之队列

队列队列跟栈非常相似,支持的操作也很有限,最基本的操作也是两个:入队enqueue(),放一个数据到 队列尾部;出队dequeue(),从队列头部取一个元素。用数组实现的栈叫作顺序栈,用链表实现的栈叫作链式栈。同样,用数组实现的队列叫作顺序队列, 用链表实现的队列叫作链式队列。循环队列:顺序队列当队头数据出队列的时候,需要将队列种的所有数据向前移动,而循环队列避免顺序队列中进行数据搬移。核...

2019-12-08 17:26:04 89

原创 数据结构之栈

栈什么是栈?1.后进者先出,先进者后出,这就是典型的“栈”结构2.从栈的操作特性来看,是一种“操作受限”的线性表,只允许在端插入和删除数据为什么需要栈?1.栈是一种操作受限的数据结构,其操作特性用数组和链表均可实现2.但,任何数据结构都是对特定应用场景的抽象,数组和链表虽然使用起来更加灵活,但却暴露了几乎所有的操作,难免会引起错误操作的风险。3.所以,当某个数据集合只涉及在某...

2019-12-08 17:00:27 154

原创 数据结构之链表

链表什么是链表1.和数组一样,链表也是一种线性表2.从内存结构来看,链表的内存结构使不连续的内存空间,是将一组零散的内存块串联起来,从而进行数据存储的数据结构3.链表中的每一个内存块被称为节点Node。节点除了存储数据外,还需记录链上下一个节点的地址,即后继指针next链表的特点1.插入、删除数据效率O(1)级别(只需要更改指针指向即可),随机访问效率O(n)级别(需要从链头至...

2019-12-08 16:32:17 148

原创 Python爬虫技术基础之正则表达式

正则表达式符号功能说明\d匹配1个数字字符\w匹配1个字母、数字或下画线字符\s匹配1个空白字符,如换行符、制表符、普通空格等\S匹配1个非空白字符\n匹配1个换行符,相当于按1次Enter键\t匹配1个制表符,相当于按1次Tab键.匹配1个任意字符,换行符除外*匹配0个或多个表达式+匹配1个或多个表达式...

2019-12-08 00:53:01 137

原创 Android性能优化之内存优化

Android性能优化之内存优化这篇文章是讲解如何通过对内存优化来实现Android性能优化.与内存优化相对的是内存泄露.那什么是内存泄露呢?我们都知道不管是Android还是Java,我们new一个对象之后,当使用完毕之后是不需要像c/c++那样手动用free函数或delete函数去释放这个对象,Java有一个垃圾回收机制(GC)可以自动将不再需要使用对象释放掉,垃圾回收算法这里就不阐述了.而...

2019-12-07 22:09:02 352

原创 Java网络编程之线程池

线程池客户机与服务器的工作流程:(1)客户1通过socket1请求与服务器建立连接。(2)服务器连接线程中的accept()方法接受来自客户1的连接,创建与客户1会话的套接字Socket1;接着创建与客户1会话的线程,称之为客户线程1,将Socket1作为参数传递给客户线程1,将客户线程1交给线程池调度运行。(3)客户1通过客户线程1与服务器实现一对一数据交换,直至客1主动断开连接,服务器...

2019-12-07 17:10:55 346

原创 Java网络编程之UDP编程

UDP编程UDP协议不是面向连接的传输协议,不能保证数据按照顺序到达,无重传机制,会丢包、收到重复包、乱序等,所以在数据可靠性要求很高的场合,一般采用TCP协议尽管如此,UDP协议仍然应用广泛,例如DNS服务、DHCP服务、网络音视频点播等都是用UDP协议传输数据。因为这些应用对速度要求很高,对丢包情况反应不明显,偶尔丢包也不是致命的,大不了重试一次,用户都能忍受。就通信的形式与特点而言,...

2019-12-07 16:16:25 222

原创 Java网络编程之Socket编程

Socket编程下图是基于TCP协议的客户机与服务器通信逻辑.客户机使用Socket类型的套接字与服务器会话,服务器则需要使用ServerSocket类型的套接字侦听网络连接,再使用Socket类型的套接字与客户机会话.会话都是通过基于套接字构建的输入流与输出流进行的.客户端代码:// TODO Auto-generated method stub Socket clientSocke...

2019-12-07 15:18:02 120

原创 Android高级UI绘制之TabLayout

MaterialDesign_TabLayoutMainActivitypackage com.example.dell.myapplication;import android.os.Bundle;import android.support.design.widget.TabLayout;import android.support.v4.app.Fragment;impo...

2019-12-06 23:52:34 199

原创 排序算法之选择排序

排序算法之选择排序选择排序和冒泡排序的思想有些类似,冒泡排序是每次循环都是相邻的两数两两比较,例如:一个数组[5,4,3,2],冒泡排序第一次循环,5与4比较,5大于4交换,接着5与3比较,5大于3交换,接着5与2比较,5大于2交换;第一次循环之后数组中的值为[4,3,2,5],5是一步一步被移动的;而选择排序是每次循环之后,直接将5移动到终点,例如:选择排序第一次循环,5与4比较,5大于4,记...

2019-12-06 20:08:18 88

原创 排序算法之插入排序

排序算法之插入排序首先,我们将数组中的数据分为两个区间,已排序区间和未排序区间。初始已排序区间只有一个元素,就是数组的第一个元素。插入算法的核心思想是取未排序区间中的元素,在已排序区间中找到合适的插入位置将其插入,并保证已排序区间数据一直有序。每插入一次,已排序区间的长度加1,未排序区间的长度减一.重复这个过程,直到未排序区间中元素为空,算法结束。如图所示(以升序为例):把数组分为两部分[...

2019-12-06 19:48:07 129

原创 用GUI自动化控制键盘和鼠标

用GUI自动化控制键盘和鼠标本文简单介绍如何通过python的pyautogui库写程序直接控制键盘和鼠标.安装pyautogui模块在命令行窗口运行pip install pyautogui,安装pyautogui.防止或恢复GUI自动化问题python能够以想象不到的速度移动鼠标并击键.实际上,他可能太快了,导致其他程序跟不上.而且,如果出了问题,但你的程序继续到处移动鼠标,可能很难...

2019-12-05 16:44:37 458

原创 Android之jni开发流程

Android之jni开发流程什么是jniJNI(java本地接口):是一个协议,该协议用来沟通java代码和外部的本地代码(c/c++).通过这个协议java代码就可以调用c/c++代码,c/c++代码也可以调用java代码.Android框架从高到低依次是应用程序层、应用框架层、核心类库和linux内核.其中应用程序层和应用框架层是基于java语言开发的,而核心类库和linux内核则需要...

2019-12-04 10:20:51 274 1

原创 Python基础知识之7

Python基础知识之71.保护对象的属性Python中没有像C++中public和private这些关键字来区别公有属性和私有属性它是以属性命名方式来区分,如果在属性名前面加了2个下划线’__’,则表明该属性是私有属性,否则为公有属性(方法也是一样,方法名前面加了2个下划线的话表示该方法是私有的,否则为公有的)。示例如下:class People(object): def...

2019-12-03 16:11:12 357

原创 Python基础知识之6

Python基础知识之6面向对象之11.定义类定义一个类,格式如下:class 类名: 方法列表 demo:定义一个Car类# 定义类class Car: # 方法 def getCarInfo(self): print('车轮子个数:%d, 颜色%s'%(self.wheelNum, self.color)) def mov...

2019-12-03 14:50:54 223

原创 排序算法之冒泡排序

排序算法之冒泡排序本文主要介绍冒泡排序的原理及其代码实现冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就让它俩互换。一次冒泡会让至少一 个元素移动到它应该在的位置,重复n次,就完成了n个数据的排序工作首先,来看一组数据4,5,6,3,2,1,从小到大进行排序,第一趟冒泡的结果如下图所示:从上图可以知道,每趟冒泡都是在执行如下...

2019-12-02 22:11:02 291

原创 Python基础知识之5

Python基础知识之5文件操作1.文件的打开与关闭文件打开在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件基本格式:open(文件名,访问模式)实例如下: f = open('test.txt', 'w')文件关闭基本格式:close( )示例如下:# 新建一个文件,文件名为:test.txtf = open('test...

2019-12-02 19:58:39 205

原创 Python基础知识之4

Python基础知识之4函数与库所谓函数,就是把具有独立功能的代码块组织为一个小模块,在需要的时候可以反复调用.函数分为编译器自带的函数(内建)和用户自己创建的函数(自定义函数).内建函数是编译器开发者已经定义好的函数,用户可以直接使用,如print()函数;自定义函数是用户按照需求自己编制并定义的函数.当各种函数很多的时候,开发者会把函数分组,分别放到不同的文件里,这样每个文件包含的代码就相...

2019-12-02 17:45:34 162

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除