- 博客(35)
- 资源 (28)
- 收藏
- 关注
原创 从应用角度看Android源码 - Thread 深入剖析
最近面试被问了Thread与runable的原理有什么不同,本人当时回答的是没什么不同,都是开一个新线程而已,面试官也没有给我个正面反馈告诉我到底有什么不同,索性趁着这个热乎劲我就去深入剖析一下这个Thread。首先写一个例子看看Thread和runable分别是怎么用的。(查看源码)先添加一个Thread的子类,并重新run方法即可package com.example.threadd...
2018-09-01 14:25:58 808
原创 从应用角度看Android源码 - ThreadLocal 的原理
最近被问了ThreadLocal的原理,之前只知道他是用来做数据的线程私有化,具体怎么用以及他的原理并没有研究过,所以这次去研究一下他的原理。首先还是创建一个新的AS项目,看看这个ThreadLocal是怎么用的,然后再一层一层去剖析他(示例代码)先编写一个线程类,在线程内用ThreadLocal处理一个在主存中的变量,然后循环操作的local变量;错误示例代码片段 一刚开始我写成了这个...
2018-08-22 15:07:56 503
原创 JNI心得 - (五)多线程回调Java的处理方式
在日常jni开发中或多或少会用到多线程,前面提到过jnienv只对当前线程有效,在其他线程中是没有用的。这就成为了多线程编程的阻碍,接下来就去研究一下多线程环境下如何使用jnienv的。首先还是先创建一个支持C++的androidstudio 项目,由于新创建的线程没有JNIEnv 环境,所以在创建线程之前要准备好创建JNIEnv的环境。虽然JNIEnv 是线程私有的,但是JavaVm 确实全...
2018-08-18 18:27:57 2950
原创 JNI心得 - (四)C++ 调用 java函数
获取代码接着上一节,这一节来写一下如何用本地代码调用java函数。首先在MainActivity.java声明一个本地方法 public static native void callBack(MainActivity activity);然后将生成的代码移到cpp文件中JNIEXPORT void JNICALL Java_com_example_test_jnite...
2018-07-22 09:44:29 753
原创 JNI心得 - (三)向本地代码传递数组
接着上一个例子java 调用本地代码 继续补充代码,这次看看本地代码如何接收java层数组。首先在MainActivity.java 添加如下代码声明 public native void stringArray(String []strArr); public native void floatArray(float []fArray); public nativ...
2018-07-18 23:39:34 4012
原创 JNI心得 - (二)java 调用本地代码
前面说JNI是供给java 调用本地方法的接口,这次就来实践一下。本次是用Android Studio 3.1.3进行的编码,首先创建项目主界面勾选include C++ support 之后操作都选择默认选项即可,最后点击finish。初始化项目所需要的库创建成功 androidstudio 默认创建了一个c++文件,build->make modu...
2018-07-17 23:27:27 483
原创 Android 源码下载 到 编译全过程
近日网速还算可以,于是乎决定下载一下Android源代码以供在家研究学习。下载之前先认识一下repo,整个Android源码是由很多个git项目构成,Google对Android代码的更新也是更新到相应模块的git项目上。那对于需要编译Android的开发者来说,要分别clone 每个git项目而且还要放到固定的位置确实是件惨绝人寰的w事,所以Google就开发了一个基于Python编写的帮助开发...
2018-07-13 08:43:26 12813 7
原创 JNI心得 - (一) 什么是JNI
近些日子想整理一下知识脉络,索性就从JNI开始,开发android开发程序员或多或少会接触jni这一概念,刚刚接触这个东西只知道通过他可以让android程序调用c代码,其他的就不知道了,后来经过长时间的摸爬滚打,终于大概知道JNI到底是个什么东西了。 学习JNI时需要了解的一些基本知识JNIJNI全称Java Native Interface,他是接口也是协议,他的出现时为了...
2018-07-08 18:05:52 518
原创 从应用角度看Android源码 - 神奇的Adapter
最近用到了Adapter,以前只是知道怎么用,从能去研究他的原理,这次就想以baseadapter为例研究一下其原理,从设计模式角度看Android在adapter这块用到了典型的观察者模式,那就从这个点开始,看看他是怎样的一个观察者。一般我们会这样设置一个ListView的适配器 list.setAdapter(adapter);从这里开始,就开始adapter的神奇探索之旅
2017-08-22 22:34:50 502
原创 从应用角度看Android源码 - 是谁调用的ActivityThread的main方法
这次研究一下ActivityThread这个类的main方法是谁调用的,先看一下main方法里都实现了那些东西。顺便提一句ActivityThread的存在是为了管理应用所在进程的主线程的,也就是UI线程的管理者。他的main方法是应用程序的入口,没有这个方法,应用是无法创建的。 public static void main(String[] args) {
2017-08-08 15:20:49 3328 2
原创 从应用角度看Android源码 - 研究一下Handler机制
上一篇扒开AsyncTask的祖坟的时候提到了Handler,说白了AsyncTask只是对Handler进行了封装,这次就进一步研究一下Handler机制,我写了个模拟handler机制的Demo (https://github.com/wk415190639/Looper),提及handler必然涉及到Looper、Message、MessageQueue,这几个类Handler机制主要组成部...
2017-08-06 00:38:26 674 1
原创 从应用角度看Android源码 - 扒开AsyncTask的祖坟
本想写一下源码的获取和编译的过程,无奈出租房的网络实在太差,没能把源码下完整,暂且跳过这一过错,假设我已经写好了,这一篇就说一个简单的知识点,作为源码开发的
2017-08-01 13:50:19 686
原创 从应用角度看Android源码 - 安装Ubuntu系统
要想搞Android源码必须要有一个支持make的系统,大多数源码开发者都会选择Ubuntu,所以我们要先把电脑安装一个Ubuntu系统(也可以装在虚拟机里),我一般会选择把镜像烧到U盘里,再通过U盘启动安装程序。具体步骤入下: 1、下载烧写工具 假设你现在有一个windows的系统,现在电脑上安装一个ultraiso(软碟通)的工具。 2、用u
2017-07-29 14:39:24 617 1
原创 Git 常用命令集合
1、 git config --global user.name 配置用户名2、 git config --global user.email 配置邮箱3、 git init 初始化本地仓库 4、 git add filename 添加文件5、 git remote add orinin url 添加远程仓库6 、 git push -u origin mast
2017-07-19 08:29:06 604 1
原创 AndroidStudio Gradle开发
gradle对于刚接触Androidstudio的人来说一直是一个陌生的概念,gradle到底是什么呢,gradle是一种构建脚本,Androidstudio的构建完全是依赖他的,他是基于Groovyd的DSL,DSL全称为领域专用语言,所以刚开始不懂也是很正常的,对于Android开发者,前期只需要理解gradle的project与task的概念即可,没必要全都掌握,在以后的工作中会慢慢熟悉的。
2017-07-12 07:44:35 523
原创 Android学习-新闻客户端养成记(三)
主界面的实现前面已做好了核心布局文件,接下来要做的就是让客户端活起来,现在的任务就是实现一个侧滑菜单的功能, 实现这个功能也并不难,使用V4包下的DrawerLayout 控件可以轻松解决这一问题 ,代码如下,package eNews.activity;import java.lang.ref.WeakReference;import android.a
2016-09-14 20:38:22 1146 1
原创 Android学习-新闻客户端养成记(二)
新闻客户端需要的Activity 新闻主界面侧滑菜单界面图片新闻界面视频列表界面 天气预报界面 新闻详情界面图片详情以上几个界面是项目所需要的核心界面,布局摆放并不怎么难,为了比例协调,我用了很多的
2016-09-13 22:36:09 1120
原创 Android学习-新闻客户端养成记(一)
经过数日的努力,新闻客户端终于完成了,想用博客记录一下开发过程中遇到的问题和解决方法,以免以后遇到同样的问题骂自己记性差.项目的前期准备做项目前应该仔细的规划一下功能需求,大体的预估一需要用到什么知识.新闻客户端需要用到的第三方jar包包括 volley Jar包:据我所知,在Android中主要提供了两种方式来进行HTTP通信,分别是httpUR
2016-09-13 19:43:58 2130 5
原创 Android学习-Swing简单的员工管理系统
用java swing 做的简单员工管理系统包括对mysql 数据库的增删改查 把数据导出到本地
2016-08-06 18:33:47 2128 3
原创 linux系统下实现聊天室
目标: linux系统下实现聊天室(1)在Linux系统下,使用TCP协议套接字编程;(2)服务器应具有处理多个客户端连接能力(设定最大连接数,如5个);(3)具有群发和私聊的能力;(4)过程描述客户端:连接服务器后,应能接收服务器发来信息并处理的能力,当收到聊天信息时,显示群发或私聊、信息发送客户及发送的信息,当收到客户加入或退出时,显示客户登录或退出,并更新客户列表;每
2016-01-18 11:24:45 5203 1
原创 Linux 下C语言 指针学习 二 (数组与指针)
很多人常常会认为指针与数组有着相当暧昧的关系,其实数组并不代表指针,数组的出现是为了把具有相同类型的若干变量按有序的形式组织起来。而指针的出生是为了通过指针去访问内存单元,这是文档上介绍的,读起来毫无瑕疵,因为太过官方,我所认知的数组其实就是在内存上申请一块固定大小的连续空间,注意是连续的空间哦,并且这块空间只能存放同一类型的数据,何为同一类型呢,比如说 int a[10]; 假设这句代码是在函
2015-12-13 14:15:55 965
原创 在VMware虚拟机下访问外网的方法
在虚拟机上访问外网有多种方式,我将声情并茂的介绍给大家 一:桥接桥接相当于是采用虚拟技术把主机和虚拟机放到一个交换机的局域网下把虚拟机的网络适配器设置成桥接要想以桥接方式连接外网,必须了解真实主机的上网方式,然后去配置虚拟主机(虚拟机里的Linux 系统)的配置文件,一般情况下配置文件会藏在/etc/sysconfig/network-scripts/文
2015-12-12 23:04:56 29132 1
原创 Linux 下 C 语言 栈 堆的学习
C程序有两个存储区,一个是静态存储区,一个是动态存储区静态存储区用来存放代码段,全局变量动态存储区又分为栈和堆栈是用来存放局部变量的,而堆是用来动态申请内存的,我们经常用的malloc 就是在堆里申请内存,返回申请的这块区域的首地址,我们对动态存储区的操作会多于静态存储区,因为动态存储区是我们运行程序是才有的区域,在程序结束的时候,这块区域会被收回。对于栈这个概念我觉得应该知道
2015-12-12 20:52:02 548
原创 Linux 下C语言 指针学习 一
最近学习了一下指针,很多初学指针的人,都会抱怨指针这个东西很难懂,因为之前学过c++,所以对指针多少有些了解,指针这东西并不可怕,我理解的指针,其实和其他类型一下(int ,char......),只不过指针存储的数据是一个32位的整型的内存地址(32地址线),以动态存储区的栈为例画一个便于理解的图
2015-12-12 19:27:17 603
原创 Linux 用makefile编译程序
makefile可以方便快捷的编译我们编写的程序,也可以处理一些文件,例如删除文件,查看文件。。。。。初学者对makefile的掌握如下: makefile的结构 第一行: 编译完成的文件名称 : 编译文件所需的源文件 第二行:(光标在行首的时候按一下tab键,一般情况下,在vim下按完tab后,之后的字母会变成红色), 输入你要执行的命令 如下
2015-11-05 10:21:28 684
原创 Linux下Socket 多客户端通信
要实现多客户端通信,必须要理清代码的框架图可能有些潦草,但仔细研究两天就会懂了,除了这以外,还有定义一下客户端与客户端,客户端与服务器之间的通信协议,说白了就是定义一些结构体内容若如下 clientmsg.h //CLIENTMSGbetween server and client#ifndef_clientmsg#define_
2015-11-04 21:38:06 679
原创 Linux 创建消息队列时出现 No space left on device的处理方法
Linux 创建消息队列有时会出现No space left on device的描述,会有以下一些解决方案:出现这样的原因基本上就是现有的消息队列数等于预设的最大队列数可以用 1. sysctl -w kernel.msgmni=你想设置的最大队列数 2. 可以清空现有的消息队列 ,在终端输入 : ipcs -q | awk '{printf $2 " "
2015-11-04 20:39:41 1380
原创 Linux下UDP通讯开发
服务器部分#include"protocol.h"#include"sys/types.h"#include"sys/socket.h"#include"string.h"#include"stdio.h"#include"stdlib.h"#include"netinet/in.h"#include"fcntl.h"int main(){
2015-10-26 12:50:04 600
原创 linux 下的socket 客户端开发
/*#define EXIT -1#define USER 1 #define MSG 2#define OK 3#define CMSGLEN 100struct CLIENTMSG{int OP;char username[20];char buf[CMSGLEN];};*/#include"stdio.h"#inclu
2015-10-26 12:42:54 484
原创 用cocos2d-x 自制flappy bird
最近学习了一些cocos2d-x 的知识,虽说只是的初学者,但还是忍不住开始实践一下,在网上找了点制作flappy bird 的资料,就照猫画虎的做了起来,不幸的是我找的资料已经太旧了,都是3.0以前的版本,虽说都是一个cocos2d-x的引擎,但对于像我这样又蠢又呆的人来说,就跟没找到资料一样,我现在用的是3.8的版本,因为我并没有找到早先的版本,所以索性就下一个当前最新的版本,cocos2d-
2015-10-09 15:34:24 739
向服务器发送字符串,拆分数字并累加
2016-01-18
linux系统下实现聊天室
2016-01-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人