自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 资源 (13)
  • 收藏
  • 关注

原创 谷歌浏览器 JSON格式化工具 JSON-handle_0.6.1.crx for MAC

百度网盘:链接:https://pan.baidu.com/s/1qdhDpTHqqbOY9W_mBI8AnQ 提取码:rc3l 复制这段内容后打开百度网盘手机App,操作更方便哦

2020-02-26 09:56:11 1875 1

原创 输入一个整数和一棵二元树,从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径,打印出和与输入整数相等的所有路径。

输入一个整数和一棵二元树,从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径,打印出和与输入整数相等的所有路径。例如:输入整数22和如下二元树 10 / / 5 12 // 47则打印出三条路径:10, 12和10, 5, 7思路一:首先看到这样的问题的时候,我最先的想法是用前序遍历该二叉树,遍历的过...

2019-10-07 16:40:49 2053

原创 HashMap 与Hashset区别

HashMap和HashSet的区别是Java面试中最常被问到的问题。如果没有涉及到Collection框架以及多线程的面试,可以说是不完整。而Collection框架的问题不涉及到HashSet和HashMap,也可以说是不完整。HashMap和HashSet都是collection框架的一部分,它们让我们能够使用对象的集合。collection框架有自己的接口和实现,主要分为Set接口,Lis...

2018-08-19 16:22:31 183

原创 Android单例模式

经常有人问我说Android学习如何进阶?不管你怎么走,设计模式可谓是进阶必备,对设计模式的理解与运用对你之后的代码书写与架构设计有很多的帮助作用,那么从今天开始我就抽时间来给大家分享下设计模式系列。什么是设计模式?其实简单的理解就是前人留下来的一些经验总结而已,然后把这些经验起了个名字叫Design Pattern,翻译过来就是设计模式的意思,通过使用设计模式可以让我们的代码复用性更高,可维...

2018-08-19 16:15:17 185

原创 对于AndroidFragment的一些理解

前言Fragment想必大家不陌生吧,在日常开发中,对于Fragment的使用也很频繁,现在主流的APP中,基本的架构也都是一个主页,然后每个Tab项用Fragment做布局,不同选项做切换,使用起来也方便。但是否对它有足够的认识吗,谷歌推荐用Fragment来代替Activity,但又没有明确说为什么要用Fragment来代替Activity,这里就引发争议了,那到底是要不要用,是否使用Frag...

2018-07-03 06:46:43 818

原创 Android常用工具类封装

1,MD5工具类:public class MD5Util { public final static String MD5(String s) { char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', '...

2018-07-03 06:45:31 268

原创 EvenyBus初理解

缘由:    平时工作,因为懒于动笔的原因,也没注重技术和经验的积累,导致之前曾经研究过的问题现在又忘记了,所以要慢慢注重积累,那么就从写作开始,谈谈对工作中碰到的问题进行整理和归纳。    我们都知道,在Android中,想处理事件传递,可以用Handler+MessageQueue+Message+Looper循环,固然是有解决方法,但是这个使用起来不方便,代码写起来也不简洁,同时还必须要理解...

2018-07-03 06:44:16 225

原创 谈谈Android6.0运行时权限理解

前言 谷歌在2015年8月份时候,发布了Android 6.0版本,代号叫做“棉花糖”(Marshmallow ),其中的很大的一部分变化,是在用户权限授权上,或许是感觉之前默认授权的不合理,现在6.0出来,使得用户权限授权变得合理。这可能也是参考IOS系统的,只有在用户需要使用权限的时候,才去授权请求,这样做的目的是提高用户体验,当然,用户感觉好了,受苦的是我们开发人员,原来的规则不适用了,现在...

2018-07-03 06:43:15 203

原创 Android图片加载库的理解

前言       这是“基础自测”系列的第三篇文章,以Android开发需要熟悉的20个技术点为切入点,本篇重点讲讲Android中的ImageLoader这个库的一些理解,在Android上最让人头疼是从网络中获取图片,显示,回收,任何一个环节有问题都可能直接OOM,当需要加载大量的图片的时候,每当快速滑,有时候会很卡,甚至会因为内存溢出而崩溃。这里讲解的库是:Universal_Image_L...

2018-07-03 06:42:18 179

原创 讲讲Handler+Looper+MessageQueue关系

Handler+Looper+MessageQueue这三者的关系其实就是Android的消息机制。这块内容相比开发人员都不陌生,在面试中,或者日常开发中都会碰到,今天就来讲这三者的关系。概述:Handler 、 Looper 、Message 这三者都与Android异步消息处理线程相关的概念。那么什么叫异步消息处理线程呢?异步消息处理线程启动后会进入一个无限的循环体之中,每循环一次,从其内部的...

2018-07-03 06:41:11 144

原创 ProGuard代码混淆技术详解

前言       受《APP研发录》启发,里面讲到一名Android程序员,在工作一段时间后,会感觉到迷茫,想进阶的话接下去是看Android系统源码呢,还是每天继续做应用,毕竟每天都是画UI和利用MobileAPI处理Json还是蛮无聊的,做着重复的事情,没有技术的上提升空间的。所以,根据里面提到的Android应用开发人员所需要精通的20个技术点,写篇文章进行总结,一方面是梳理下基础知识和巩固...

2018-07-03 06:39:06 514

原创 Android系统简介

近来,看了一本书,名字叫做《第一行代码》,是CSDN一名博主写的,一本Android入门级的书,比较适合新手。看了书之后,有感而发,想来进行Android开发已经有一年多了,但欠缺系统化的学习,知识杂乱无章,没有条理和总结。因此,想想我是否可以尝试的写些文章,来对自己之前学过的知识和工作经验进行归纳和整理,整理出自己的知识体系呢。所以,就有这篇文章的诞生,如果其中理解不到位的地方,望园里的兄弟姐妹...

2018-07-03 06:37:36 1621

原创 React Native 中组件的生命周期

概述就像 Android 开发中的 View 一样,React Native(RN) 中的组件也有生命周期(Lifecycle)。所谓生命周期,就是一个对象从开始生成到最后消亡所经历的状态,理解生命周期,是合理开发的关键。RN 组件的生命周期整理如下图:如图,可以把组件生命周期大致分为三个阶段:第一阶段:是组件第一次绘制阶段,如图中的上面虚线框内,在这里完成了组件的加载和初始化;第二阶段:是组件在...

2018-06-20 16:45:07 188

原创 在苹果Mac电脑上搭建Android Eclipse开发环境

在Mac电脑上搭建Android Eclipse开发环境在Mac电脑上搭建Android Eclipse开发环境有如下4步:1. 先安装JDK,注意不要安装最新的1.9,安装1.8就好2. 下载Eclipse3. 在Eclipse上安装ADT 插件4. 通过 Android SDK Manager安装更新Android SDK工具详细步骤说明安装JDK。 注意不要安装最新的1.9,安装1.8的就好...

2018-04-22 22:06:34 409

原创 mac JDK卸载

背景:mac 环境下不支持react  native,不支持java 9,因此将本机上的java 卸载,重装1.8,安装完成,成功。解决方式: 1.卸载java 9.0.1: sudo rm -rf /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPl...

2018-04-13 10:17:19 1639

原创 现有Android项目集成react native

现有工程集成RN步骤:1、首先使用命令行初始化一个默认RM工程:react-native init RN_Demo2、新创建文件夹,并将要集成RN的工程放到该文件夹目录下边;3、将第一步初始化得到的 文件   package.json   App.js   index.js  拷贝存放到要集成RN工程同级目录下;4、执行npm install  命令,发现生成   node_modules 文件(...

2018-04-12 21:40:12 247

原创 react native Android 项目初始化创建项目

创建+运行调试RN项目cd到创建工程的目录   cd   /Users/yangxingda/Desktop/2018project/RN/创建RN工程: react-native init RN_Demo进入到工程根目录:cd RN_Demo运行项目并启动服务:react-native run-android起动服务:npm start 选择dev Setting==》Debug server ...

2018-04-12 21:39:12 278

原创 jni_ndk_cygwin安装及其环境变量的配置:

jni_ndk_cygwin安装及其环境变量的配置:一、需要的安装工具,及安装包:       setup.exe       http%3a%2f%2fmirrors.163.com%2fcygwin%2f.zip       android-ndk-r8-windows.zip二、相关介绍:       主要使用的是ndk中的目录C:\jni\android-ndk

2014-04-12 00:06:39 396

原创 jni_ndk_cygwin安装及其环境变量的配置:

jni_ndk_cygwin安装及其环境变量的配置:一、需要的安装工具,及安装包:       setup.exe       http%3a%2f%2fmirrors.163.com%2fcygwin%2f.zip       android-ndk-r8-windows.zip二、相关介绍:       主要使用的是ndk中的目录C:\jni\android-ndk

2014-04-11 23:59:21 419

原创 指针变量 如果指向的这块内存空间 已经被系统回收,程序员是不能使用这块内存

# include# define PI 3.14 /* 指针变量 如果指向的这块内存空间 已经被系统回收,程序员是不能使用这块内存 */f( int** qaddress){  int j = 5; // *qaddress 等价于 main函数中的q变量   *qaddress = &j;      printf("j的地址为%#x\n",&j

2014-04-10 07:58:10 572

原创 C语言中的指针错误——不能把不匹配的数据类型 赋给指针变量

# include//不能把不匹配的数据类型 赋给指针变量 // 不匹配的指针类型不能互相赋值 main(){              int i =5;       //  int* p;  //int* p 创建一个变量 名字叫p  变量只能存放地址的类型               //  p = 3 ; // 错误的 不合法 ,不能把一个int类型的数据

2014-04-09 22:54:42 1058

原创 指针常见的错误——指针未赋初值

# includemain(){       int *p;       int i=5;       // *p // 得到p 指针变量,存放的地址,对应里边的值       printf("*p=%d\n",*p);  // 因为p没有赋初值,p里面存放的地址就是       // 一个随机的地址,              // 访问一个随机地址里面存放的数据

2014-04-09 21:51:10 1821

原创 内存空间的申请,变量之间是不相互影响的。

#includemain(){       int i=3; // 1为内存中开辟的一块内存空间,int 的类型为3         // int 代表的是数据的类型,征程,i代表的是变量的名字。         // 3 代表的是真实的数据,          printf("i=%d\n",i);                &i;       // 可以得到i变

2014-04-07 23:16:46 620

原创 通过查看连连看的内存地址,连连看的外挂!!!

#   includemain(){       printf("ready go 60....\n");       int i=60;       // 获取某一个变量在内存空间的地址,       printf("i的地址为%#x\n",&i);      // & i取i地址                                 for(;i>0;

2014-04-07 22:36:04 995

原创 C预言的指针机器内存占用

指针就是一个地址:地址这个概念就是用用给内存空间进行编号。处理器要是用一块内存,需要知道使用的哪块内存,cpu    数据总线===》》     内存控制总线===》》   32位的操作系统所能表示的最大内存空间为2的23次方即为 4G有一些内存空间预留给系统硬件。

2014-04-07 17:10:11 493

原创 C预言的输入输出函数

/*%d  -  int%ld – long int%c  - char%f -  float%lf – double%x – 十六进制输出 int 或者long int 或者short int%o -  八进制输出%s – 字符串%u -  无符号的数据 Int len;Scanf(“%d”,&len);*/// java System

2014-04-07 16:43:16 567

原创 C 预言与java预言数据类型的差异

C语言中没有boolean  int 0  ,1C语言中没有String 类型,要表示一个字符串就需要使用char数组,C语言中没有byte类型,需要有一个产度为8位的数据类型表示byte类型。可以用char数组表示。

2014-04-07 16:23:39 570

原创 多线程引言及多线程存在的意义

/*进程:一个正在执行中的程序每一个进程执行都有一个执行顺序,改顺序是一个执行路径。或者叫一个控制单元。线程:就是进程中的一个独立的控制单元,线程在控制着进程的执行,一个进程中至少有一个线程,java 虚拟机启动的时候会有一个进程   java.exe该进程中至少有一个进程负责java 程序的执行,而且这个进程运行的代码存在于

2014-03-29 22:24:53 864

Android 判断网络连接

Android 判断网络连接,若为连接网络,则弹出提示框,点击确定进入设置Setting 界面;记得增加权限

2014-11-20

android 横竖屏切换生命周期

android activity 执行屏幕横竖屏切换的时候activity声明周期执行的竖屏的时候点击横屏 09-04 15:54:27.675: I/yxd(6708): 应用程序执行了============onPause===方法===>> 09-04 15:54:27.685: I/yxd(6708): 应用程序执行了============onStop===方法===>> 09-04 15:54:27.685: I/yxd(6708): 应用程序执行了============onDestory===方法===>> 09-04 15:54:27.785: I/yxd(6708): 应用程序执行了============OnCreate===方法===>> 09-04 15:54:27.795: I/yxd(6708): 应用程序执行了============onStart===方法===>> 09-04 15:54:27.795: I/yxd(6708): 应用程序执行了============onRestoreInstanceState===方法===>> 为了避免activity 重新加载过程中有闪屏的现象,则需要再清单文件中配置该activity 的属性 android:screenOrientation="portrait" android:configChanges="keyboardHidden|orientation|screenSize",详细信息请参阅附件源码,技术交流 杨兴达 电话:18010180585 邮箱;yangxingda1988@163.com LOG过滤: yxd

2014-09-04

Android powermanger wakelock

author:杨兴达; 邮箱:yangxingda1988@163.com 电话:180 1018 0585 Android 电源管理 -- wakelock机制,通过控制wakelock 实现保持pad 禁止休眠状态; Wake Lock是一种锁的机制, 只要有人拿着这个锁,系统就无法进入休眠, 可以被用户态程序和内核获得. 这个锁可以是有超时的 或者 是没有超时的, 超时的锁会在时间过去以后自动解锁。如果没有锁了或者超时了, 内核就会启动休眠的那套机制来进入休眠. PowerManager.WakeLock 有加锁和解锁两种状态,加锁的方式有两种: 第一种是永久的锁住,这样的锁除非显式的放开,否则是不会解锁的,所以这种锁用起来要非常的小心。 第二种锁是超时锁,这种锁会在锁住后一段时间解锁。 在创建了 PowerManager.WakeLock 后,有两种机制,第一种是不计数锁机制,另一种是计数锁机制。可以通过 setReferenceCounted(boolean value) 来指定,一般默认为计数机制。这两种机制的区别在于,前者无论 acquire() 了多少次,只要通过一次 release()即可解锁。而后者正真解锁是在( --count == 0 )的时候,同样当 (count == 0) 的时候才会去申请加锁。所以 PowerManager.WakeLock 的计数机制并不是正真意义上的对每次请求进行申请/释放每一把锁,它只是对同一把锁被申请/释放的次数进行了统计,然后再去操作。 源码 位置:frameworks/base/core/java/android/os/PowerManager.java ++++++++++++++++++++++++ 讲述 应用层 申请的锁 怎么传到kernel下面的,来理解 整个wakelock的框架。 比如android跑起来之后 在 /sys/power/wake_lock 下面的PowerManagerService 的生成过程。 1).应用程序申请锁 Android 提供了现成 android.os.PowerManager 类 , 类中 提供newWakeLock(int flags, String tag)方法 来取得 应用层的锁, 此函数的定义 frameworks/base/core/java/android/os/PowerManager.java 应用程序 在申请wake_lock时 都会有调用以下 部分。 实例: PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, “MyTag”); wl.acquire();//申请锁,这里会调用PowerManagerService里面acquireWakeLock() *********************** wl.release(); //释放锁,显示的释放锁,如果申请的锁不在此释放,系统就不会进入休眠。 ====================================== 2). frameworks层 /frameworks/base/services/java/com/android/server/PowerManagerService.java这个类是来管理 所有的应用程序 申请的wakelock。比如音视、频播放器、camera等申请的wakelock 都是通过这个类来 管理的。 static final String PARTIAL_NAME ="PowerManagerService" nativeAcquireWakeLock(PARTIAL_WAKE_LOCK_ID, PARTIAL_NAME); 上面 这个函数调用Power类 里面的 acquireWakeLock(),此时的PARTIAL_NAME作为参数传递到底层去。 public static native void nativeAcquireWakeLock(int lock, String id); 注:在PowerManagerService 类中没有实现nativeAcquireWakeLock,其实现体在 frameworks/base/core/jni/android_os_Power.cpp中,所以nativeAcquireWakeLock()方法时会调用JNI下的实现方法。 3).JNI层的实现 路径:frameworks/base/core/jni/android_os_Power.cpp // static void acquireWakeLock(JNIEnv *env, jobject clazz, jint lock, jstring idObj) { ************** const char *id = env->GetStringUTFChars(idObj, NULL); acquire_wake_lock(lock, id); env->ReleaseStringUTFChars(idObj, id); } 注:在acquireWakeLock()中调用了 路径下hardware/libhardware_legacy/power/power.c下面的acquire_wake_lock(lock, id) 4).与kernel层的交互 在power.c下的acquire_wake_lock(lock, id)函数如下: int acquire_wake_lock(int lock, const char* id) { ************** return write(fd, id, strlen(id)); } 注: fd就是文件描述符,在此 表示”/sys/power/wake_lock” id就是从PowerManagerService类中传下来的参数即:PARTIAL_NAME = "PowerManagerService" 到此 就是通过 文件系统 来与kernel层 交互的地方。 +++++++++++++++++++++++++++++++++++++++++++++++++++++ PowerManager类被应用程序调用,控制电源设备状态切换: PowerManager类对外有三个接口函数: 1、void goToSleep(long time); //强制设备进入Sleep状态 Note:在应用层调用该函数, 应用需要 在 源码下编译,用系统签名,否则 调用 此函数 出错; 2、newWakeLock(int flags, String tag);//取得相应层次的锁 flags参数说明: PARTIAL_WAKE_LOCK :保持CPU 运转,屏幕和键盘灯是关闭的。 SCREEN_DIM_WAKE_LOCK :保持CPU 运转,允许保持屏幕显示但有可能是灰的,关闭键盘灯 SCREEN_BRIGHT_WAKE_LOCK :保持CPU 运转,保持屏幕高亮显示,关闭键盘灯 FULL_WAKE_LOCK :保持CPU 运转,保持屏幕高亮显示,键盘灯也保持亮度 ACQUIRE_CAUSES_WAKEUP: 一旦有请求锁时,强制打开Screen和keyboard light ON_AFTER_RELEASE: 在释放锁时reset activity timer Note: 如果申请了partial wakelock,那么即使按Power键,系统也不会进Sleep,如Music播放时 如果申请了其它的wakelocks,按Power键,系统还是会进Sleep 3、void userActivity(long when, boolean noChangeLights);//User activity事件发生,设备会被切换到Full on的状态,同时Reset Screen off timer. PowerManager和WakeLock的操作步骤 PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);通过 Context.getSystemService().方法获取PowerManager实例。 然后通过PowerManager的newWakeLock ((int flags, String tag)来生成WakeLock实例。int Flags指示要获取哪种WakeLock,不同的Lock对cpu 、屏幕、键盘灯有不同影响。 获取WakeLock实例后通过acquire()获取相应的锁,然后进行其他操作,最后使用release()释放(释放是必须的)。 Note: 1. 在使用以上函数的应用程序中,必须在其Manifest.xml文件中加入下面的权限: <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.DEVICE_POWER" /> 2. 所有的锁必须成对的使用, 如果申请了而没有及时释放,会造成系统故障。如申请了partial wakelock,而没有及时释放, 那系统就永远进不了Sleep模式.

2014-08-25

Android AES加密

Android 基于DES 的对称加密算法案例!

2014-08-18

Android menu菜单

Android实现menu菜单,动态提示用户版本、apk 信息使用说明!

2014-08-06

Android横竖横180竖180旋转

Android横竖屏切换,包含代码中横屏 180 旋转 ,竖屏180 旋转; //横屏正方向 if(getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {   setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE); } //横屏反方向 else if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE) {   setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } //纵屏正方向 else if(getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {   setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT); } //纵屏反方向 else if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT) {   setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED, ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE, ActivityInfo.SCREEN_ORIENTATION_PORTRAIT, ActivityInfo.SCREEN_ORIENTATION_USER, ActivityInfo.SCREEN_ORIENTATION_BEHIND, ActivityInfo.SCREEN_ORIENTATION_SENSOR, ActivityInfo.SCREEN_ORIENTATION_NOSENSOR, ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE, ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT, ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE, ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT, ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR,

2014-08-06

fragmentDemo

fragmentDemo tabactivity升级到android2.2后用fragment代替底部导航。

2014-02-19

android gpd g谷歌导航

android gps 谷歌地图导航。map!开启你的地图开发之旅!!!

2014-02-18

android splash 闪屏界面 !

android 移动开应用程序首界面,欢迎界面。 闪屏界面,splash界面。

2013-12-08

上导航栏+下导航栏 android

android 上导航栏+ 下导航栏!!

2013-12-08

android splash 闪屏界面

android 闪屏 界面 splah demo ,手机软件开机必备demo! update.xml 为部署到tomcat 服务器代码,检测version版本号, 另一部分为splash demo androd 应用程序。

2013-12-08

android 摄像头拍照

android调用摄像头拍张,采集信息!!

2013-04-26

空空如也

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

TA关注的人

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