ES学习记录1——ES基本配置

 Elasticsearch简称ES,官网对它的介绍是

The Heart of the Elastic Stack. Elasticsearch is a distributed, RESTful search and analytics engine capable of solving a growing number of use cases. As the heart of the Elastic Stack, it centrally stores your data so you can discover the expected and uncover the unexpected.

 Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎。它几乎可以提供几乎实时的方式快速存储、搜索和分析大量的数据,它通常用作底层引擎/技术,为具有复杂搜索功能和要求的应用程序提供支持。它是一个分布式、支持Restful搜索以及分析的引擎,是Elastic Stack的核心产品。主要使用场景有:

  • 在线网上商城,提供用户搜索你所卖的商品功能。在这个例子中,你可以使用Elasticsearch去存储你的全部的商品目录和存货清单并且提供搜索和搜索自动完成以及搜索推荐功能。
  • 收集日志或者业务数据,并且去分析并从这些数据中挖掘寻找市场趋势、统计资料、摘要信息或者反常情况。在这个例子中,你可以使用Logstash(part of the Elasticsearch/Logstash/Kibana stack)去收集、聚合并且解析你的数据,然后通过Logstash将数据注入Elasticsearch。一旦数据进入Elasticsearch,你就可以运行搜索和聚集并且从中挖掘任何你感兴趣的数据。
  • 一个价格预警平台,它可以让那些对价格精明的客户指定一个规则,比如:“我相中了一个电子产品,并且我想在下个月任何卖家的这个电子产品的价格低于多少钱的时候提醒我”。在这个例子中,你可以抓取所有卖家的价格,把价格放入Elasticsearch并且使用Elasticsearch的反向搜索(过滤器/抽出器)功能来匹配价格变动以应对用户的查询并最终一旦发现有匹配结果时给用户弹出提示框。
  • 有分析学/商业情报的需求并且想快速审查、分析并使用图像化进行展示,并且在一个很大的数据集上查询点对点的问题(试想有百万或千万的记录)。在这个例子中,你可以使用Elasticsearch去存储你的数据然后使用Kibana(part of the Elasticsearch/Logstash/Kibana stack)去构建定制化的仪表盘。这样你就可以很直观形象的了解对你重要的数据。此外,你可以使用Elasticsearch的集成功能,靠你的数据去展现更加复杂的商业情报查询。

Elasticsearch底层Lucene开源库,其实它就是帮我们写了代码去调用Lucene的接口,提供了REST API的操作接口,JDK版本至少是JDK 8才能安装使用,具体介绍及其使用见官网文档

1. 启动

 启动Elasticsearch:elasticsearch-6.4.0\bin\elasticsearch.bat,可以在DOS窗口看到启动信息,最终会看到类似于下面的一行(主要是节点名[V8JnETy]可能会不同):

[2018-09-01T10:14:11,633][INFO ][o.e.n.Node               ] [V8JnETy] started

在浏览器端访问9200端口(或者直接在powershell中输入curl http://localhost:9200命令),得到一个JSON格式的说明信息:

{
  "name" : "V8JnETy",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "Pkr4spGJTMy0K5BQ4rn5GA",
  "version" : {
    "number" : "6.4.0",
    "build_flavor" : "default",
    "build_type" : "zip",
    "build_hash" : "595516e",
    "build_date" : "2018-08-17T23:18:47.308994Z",
    "build_snapshot" : false,
    "lucene_version" : "7.4.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

这里可以手动更改集群cluter和节点名node,命令如下:

./elasticsearch  -Ecluster.name=my_first_cluster -Enode.name=my_first_node

节点名为V8JnETy、集群名字为elasticsearch(默认名),以及版本信息;

默认情况Elasticsearch只允许本机访问,如果需要远程访问,需要配置elasticsearch-6.4.0\config\elasticsearch.yml中的network.host属性(大约在55行处),将其改为network.host: 0.0.0.0,表示任何IP都可以访问,实际开发中会设置为具体的IP。

1.1 ES的集群配置

 ES的集群配置(都是修改ES的配置文件elasticsearch.yml)主要分为:主节点配置和从节点配置。

配置主节点jack_master

# 配置分布式主节点
# 集群名
cluster.name: jack
# 节点名
node.name: jack_master
# 是否为主节点
node.master: true
# 绑定IP
network.host: 127.0.0.1

然后再次解压ES安装包到其他目录,每解压一个出来就可以配置一个ES的从节点,比如这里是解压两次就可以配置2个从节点,分别修改它们的配置文件让它们加入到集群jack中:

配置从节点jack_slave1

# 配置从节点的信息
# 集群名一定要和主节点所在集群名一致,默认集群按名字匹配
cluster.name: jack
# 节点名
node.name: jack_slave1
# 绑定IP
network.host: 127.0.0.1
# 默认端口是9200,如果不配置就会和主节点端口冲突
http.port: 8100

# 用于寻找集群,不加这个配置这个节点是游离在集群之外的
discovery.zen.ping.unicast.hosts: ["127.0.0.1"]

配置从节点jack_slave2

# 配置从节点的信息
# 集群名一定要和主节点所在集群名一致,默认集群按名字匹配
cluster.name: jack
# 节点名
node.name: jack_slave2
# 绑定IP
network.host: 127.0.0.1
# 默认端口是9200,如果不配置就会和主节点端口冲突
http.port: 8200

# 用于寻找集群,不加这个配置这个节点是游离在集群之外的
discovery.zen.ping.unicast.hosts: ["127.0.0.1"]

就照着上面的步骤ES可以轻松实现扩容,启动的时候注意节点启动顺序,先主节点再从节点再Kibana,在Kibana监控页面可以看到启动的三个节点,启动界面和监控页面如下:
这里写图片描述

这里写图片描述
【问题】
后来在启动集群时(场景:主节点jack_master启动后无警告,在启动从节点jack_slave1时,主节点窗口抛出此警告),出现如下的警告:

[2018-11-16T08:53:31,911][WARN ][o.e.d.z.ElectMasterService] [jack_master] value for setting "discovery.zen.minimum_master_nodes" is too low. This can result in data loss! Please set it to at least a quorum of master-eligible nodes (current value: [-1], total number of master-eligible nodes used for publishing in this round: [2])

上述警告是因为默认情况下discovery.zen.minimum_master_nodes=1一台服务器只能有一个主节点(选举一个Master需要多少节点,即最少候选节点),这个参数根据经验一般设置为N/2+1(若不为整数,则向下取整),N为集群中节点的数量。这个参数也是我在后面学习过程中导致脑裂的原因,扯得有点远了,回来上述的问题,可以配置上述参数为2即可(我本地是3个节点)。

1.2 ES配置

 ES有很好的默认值,所以只需要很少的配置,可以使用Cluster Update Settings API在正在运行的群集上更改大多数设置。主要是指本地的一些配置,借助于配置文件进行配置,主要分为3块:

  • elasticsearch.yml,ES的配置文件;
  • jvm.options,ES的JVM配置文件;
  • log4j2.properties,ES的日志配置文件;

关于配置文件的路径,默认是解压缩包的解压路径$ES_HOME/config,但是具体的配置路径可以通过ES_PATH_CONF环境变量来改变,比如:

ES_PATH_CONF=/path/to/my/config ./bin/elasticsearch

ES的配置文件是yaml格式,下面是配置data和logs目录的方法:

path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch

环境变量还可以使用${...}这样的形式配置,比如:

node.name:    ${HOSTNAME}
network.host: ${ES_NETWORK_HOST}

ES配置文件中,可配置的参数有(汇总,来源于网络):

# es集群名,默认是elasticsearch,es会自动发现在同一网段下的es,如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群
cluster.name: elasticsearch

# 节点名,默认随机指定一个name列表中名字,该列表在es的jar包中config文件夹里name.txt文件中,6.4.0版本中好像已经没有这个文件了
node.name: "Franz Kafka"

# 候选资格,表示该节点是否有资格被选举成为master,默认是true,es默认集群中的第一台机器为master,如果这台机挂了就会重新选举master
node.master: true

# 表示该节点是否存储索引数据,默认为true
node.data: true

# 设置索引分片个数,默认为5
index.number_of_shards: 5

# 设置索引副本个数,默认为1
index.number_of_replicas: 1

# 设置ES配置文件的存储路径,默认是es根目录下的config文件夹下
path.conf: /path/to/conf

# 设置索引数据的存储路径,默认是es根目录下的data文件夹下,可以设置多个存储路径,用逗号隔开,例:path.data: /path/to/data1,/path/to/data2
path.data: /path/to/data

# 设置临时文件的存储路径,默认是es根目录下的work文件夹
path.work: /path/to/work

# 设置日志文件的存储路径,默认是es根目录下的logs文件夹
path.logs: /path/to/logs

# 设置插件的存放路径,默认是es根目录下的plugins文件夹
path.plugins: /path/to/plugins

# 设置ES可以是否可以锁定内存,因为当jvm开始swapping时es的效率会降低,所以要保证它不swap,可以把ES_MIN_MEM和ES_MAX_MEM两个环境变量设置成同一个值,并且保证机器有足够的内存分配给es。同时也要允许ES的进程可以锁住内存,linux下可以通过`ulimit -l unlimited`命令
bootstrap.mlockall: true

# 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0
network.bind_host: 192.168.0.1

# 设置其它节点和该节点交互的ip地址(真实IP),如果不设置它会自动判断
network.publish_host: 192.168.0.1

# 这个参数是用来同时设置bind_host和publish_host上面两个参数
network.host: 192.168.0.1

# 设置节点间交互的tcp端口,默认是9300
transport.tcp.port: 9300

# 设置是否压缩tcp传输时的数据,默认为false,不压缩
transport.tcp.compress: true

# 设置对外服务的http端口,默认为9200
http.port: 9200

# 设置内容的最大容量,默认100mb
http.max_content_length: 100mb

# 是否使用http协议对外提供服务,默认为true,开启
http.enabled: false

# gateway的类型,默认为local即为本地文件系统,可以设置为本地文件系统,分布式文件系统,hadoop的HDFS,和amazon的s3服务器,其它文件系统的设置方法下次再详细说
gateway.type: local

# 设置集群中N个节点启动时进行数据恢复,默认为1
gateway.recover_after_nodes: 1

# 设置初始化数据恢复进程的超时时间,默认是5分钟
gateway.recover_after_time: 5m

# 设置这个集群中节点的数量,默认为2,一旦这N个节点启动,就会立即进行数据恢复
gateway.expected_nodes: 2

# 初始化数据恢复时,并发恢复线程的个数,默认为4
cluster.routing.allocation.node_initial_primaries_recoveries: 4

# 添加删除节点或负载均衡时并发恢复线程的个数,默认为4
cluster.routing.allocation.node_concurrent_recoveries: 2

# 设置数据恢复时限制的带宽,如入100mb,默认为0,即无限制
indices.recovery.max_size_per_sec: 0

# 来限制从其它分片恢复数据时最大同时打开并发流的个数,默认为5
indices.recovery.concurrent_streams: 5

# 设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4)
discovery.zen.minimum_master_nodes: 1

# 设置集群中自动发现其它节点时ping连接超时时间,默认为3秒,对于比较差的网络环境可以高点的值来防止自动发现时出错
discovery.zen.ping.timeout: 3s

# 设置是否打开多播发现节点,默认是true
discovery.zen.ping.multicast.enabled: false

# 设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点
discovery.zen.ping.unicast.hosts: ["host1", "host2:port", "host3[portX-portY]"]

1.3 ES的JVM配置

 ES的java虚拟机设置,很少需要手动配置,如果需要改动,绝大部分是改动堆的大小,设置JVM首选方式是配置jvm.options文件,这个配置文件包含了一系列分隔线分隔的JVM参数,使用的是一种特殊的语法,具体规则如下:

  • 仅包含空格的行将被忽略;
  • #开头的行被视作注释;
  • -开头的行被视作JVM选项,这个选项独立于JVM而应用,如-Xmx2g
  • 以数字开头后面接-:符号的,也被视作JVM选项,但仅在JVM的版本大于等于这个数字时才使用,如8-:-Xmx2g(大于等于JDK8版本才适用);
  • 以数字开头后面接:-符号的,也被视作JVM选项,但仅在JVM版本和数字相同时才适用,如8:-Xmx2g(仅适用于JDK8);
  • 以数字开头后接-数字:的,也被视作JVM想象,但仅在JVM版本在这两个数字区间内,如8-9:-Xmx2g
  • 除此之外的所有行都不生效;

1.4 ES的安全配置

 ES中有些配置是敏感的,仅通过系统文件权限来保护是不够的,为此,Elasticsearch提供了一个密钥库和elasticsearch-keystore工具来管理密钥库中的设置。这些设置就像elasticsearch.yml中的常规配置一样,需要在集群中的每个节点进行指定,目前,所有安全设置都是基于特定于节点的设置,每个节点上的值必须相同。

1.5 ES的日志配置

 ES采用log4j 2作日志管理,log4j 2可以使用log4j2.properties文件进行配置,ES就暴露出三个属性:${sys:es.logs.base_path}(解析为日志目录)、${sys:es.logs.cluster_name}(解析为集群名,在默认配置中用作日志文件名的前缀)和${sys:es.logs.node_name}(如果通过node.name显式的设置了节点名称,将解析为节点名),可以在配置文件中引用来确定日志文件的位置。

 加设置ES的根目录是/var/log/elasticsearch,集群名为production,下面是ES中log4j 2的部分配置:

# 配置RollingFile的附加器
appender.rolling.type = RollingFile
appender.rolling.name = rolling
# %ES_Home%/节点名.log就是日志文件的路径和名字,即/var/log/elasticsearch/production.log
appender.rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}.log
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] %marker%.-10000m%n
# 滚动日志到/var/log/elasticsearch/production-yyyy-MM-dd-i.log,日志将在每个卷上压缩,i递增
appender.rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.log.gz
appender.rolling.policies.type = Policies
# 使用基于时间的滚动策略
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
# 每1天滚动日志
appender.rolling.policies.time.interval = 1
# 在日界上对齐卷(而不是每隔二十四小时滚动)
appender.rolling.policies.time.modulate = true
# 使用基于大小的滚动策略
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
# 256 MB后滚动日志
appender.rolling.policies.size.size = 256MB
# 滚动日志时使用删除操作
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.fileIndex = nomax
appender.rolling.strategy.action.type = Delete
appender.rolling.strategy.action.basepath = ${sys:es.logs.base_path}
# 仅删除与文件模式匹配的日志
appender.rolling.strategy.action.condition.type = IfFileName
# 该模式仅删除主日志
appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-*
# 仅在我们累积了太多压缩日志时才删除
appender.rolling.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize
# 压缩日志的大小条件为2 GB
appender.rolling.strategy.action.condition.nested_condition.exceeds = 2GB

【注意】可以使用.gz替换appender.rolling.filePattern属性中的.zip(使用zip格式压缩滚动日志),如果删除.gz扩展名,则日志将不会在滚动时进行压缩。

 如果想指定时间段内保留日志文件,可以使用带有删除操作的翻转策略。

# 配置DefaultRolloverStrategy
appender.rolling.strategy.type = DefaultRolloverStrategy
# 配置删除操作以处理翻转
appender.rolling.strategy.action.type = Delete
# Elasticsearch日志的基本路径
appender.rolling.strategy.action.basepath = ${sys:es.logs.base_path}
# 处理翻转时应用的条件
appender.rolling.strategy.action.condition.type = IfFileName
# 从基本路径中删除文件(和全局${sys:es.logs.cluster_name}-*匹配的),这只需要删除已滚动的Elasticsearch日志,但不能删除已弃用和慢速日志
appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-* 
# 应用于与glob匹配的文件的嵌套条件
appender.rolling.strategy.action.condition.nested_condition.type = IfLastModified
# 保留日志七天
appender.rolling.strategy.action.condition.nested_condition.age = 7D 
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ESweb 是小型的个人信息发布平台,使用 esweb 可以搭建各式各样的网络信息发布网站,但更多的是应用于个性化的博客. ESweb最大特色 —— 简单易用!! (因此她非常适合PHP新手们,只要懂得一点点PHP基础知识都能阅读程序,呵呵~) 程序规格: 1.ESweb全面支持最新的PHP版本,可以在PHP5.2及PHP6下无报错运行. 2.ESweb在模板引擎上使用的PHP官方推荐的smarty. 3.ESweb使用UTF-8编码,可以简繁体转换 (也适合港澳台的朋友们) 特色介绍: 1.具有基本功能(全站配置、无限分类、信息发布、评论留言、友情链接、邮件回复、smarty缓存、rewrite伪静态、RSS、代码高亮..),简单易用. 2.每一个功能都是独立分来,因此可扩展性强 (程序特意嵌套 “酷站栏目” 演示扩展的简单特色) 3.信息发布系统提供完美的UBB可视化编辑解决方案,在您获得安全高效代码存储的同时,又能享受可视化编辑的便捷。(同时程序保留CKeditor接口). 4.信息发布系统开启立即上传模式(默认为附件和图片,为了安全不开启视频、flv和其他文件上传). 5.程序会自动根据编辑器提交的HTML内容和数据库中上传内容进行比较,自动删除所有没有使用的上传文件. 6.定期由服务器脚本删除上传数据库中没提交的文件记录,这样就能防止别人将你的网站作为免费相册空间了. 7.可自定义皮肤,只需html、css即可开发出各式各样的网站. 8.更多特色有待使用者发掘~呵呵
《OPhone应用开发权威指南》2010 黄晓庆 博文视点 broadview 第1章 OPhone平台概述 1 1.1 OPhone的架构 1 1.1.1 Linux内核 2 1.1.2 本地库 2 1.1.3 OPhone运行环境 3 1.1.4 Widget运行环境 3 1.1.5 应用程序框架 4 1.1.6 应用程序 5 1.2 开发OPhone应用程序 5 1.2.1 开发语言 5 1.2.2 OPhone SDK 5 1.2.3 OPhone开发者社区 6 1.3 将OPhone应用上传到Mobile Market 7 1.3.1 Mobile Market的商业模式 7 1.3.2 Mobile Market发布流程 8 1.4 小结 11 第2章 OPhone开发环境和流程 12 2.1 安装Eclipse和ODT 12 2.1.1 安装Java SDK 12 2.1.2 安装Eclipse 13 2.1.3 安装OPhone SDK 13 2.1.4 安装和配置ODT插件 14 2.2 第一个OPhone应用程序 16 2.2.1 新建OPhone项目 16 2.2.2 运行OPhone项目 18 2.2.3 更新资源文件 21 2.3 调试OPhone应用程序 24 2.3.1 设置断点 25 2.3.2 启动调试 25 2.3.3 单步跟踪 26 2.4 在命令行下开发OPhone程序 27 2.4.1 创建项目 27 2.4.2 用Ant编译项目 28 2.4.3 运行应用程序 28 2.5 OPhone SDK介绍 30 2.5.1 OPhone模拟器 30 2.5.2 模拟SD卡 32 2.5.3 ADB 32 2.5.4 DDMS 33 2.6 小结 34 第3章 OPhone应用程序模型 35 3.1 OPhone应用程序基础 35 3.1.1 OPhone应用程序运行环境 35 3.1.2 OPhone应用程序的组成 36 3.2 Activity 43 3.2.1 Activity创建与声明 44 3.2.2 Activity的生命周期 48 3.2.3 启动Activity 55 3.2.4 Activity和Task 58 3.3 Content Provider 61 3.4 BroadcastReceiver 64 3.5 Service 66 3.6 安全与许可 66 3.6.1 安全架构 66 3.6.2 许可 67 3.7 数字签名 70 3.7.1 签名策略 70 3.7.2 签名步骤 71 3.8 小结 72 第4章 图形用户界面 73 4.1 用户界面概述 73 4.1.1 手机软硬件特性的发展 73 4.1.2 如何影响应用程序开发 74 4.1.3 OPhone图形引擎 74 4.2 用户界面设计 75 4.2.1 声明布局文件 75 4.2.2 编写XML文件 75 4.2.3 加载XML文件 76 4.2.4 将数据绑定到AdapterView 77 4.2.5 创建菜单 79 4.2.6 创建Dialog 81 4.2.7 通知用户 83 4.2.8 处理用户输入 84 4.2.9 样式与主题 84 4.3 常用Widget 86 4.3.1 TextView 86 4.3.2 Button 89 4.3.3 ImageView 90 4.3.4 ProgressBar 92 4.3.5 DatePicker/TimePicker 94 4.3.6 GridView 96 4.3.7 Spinner 98 4.3.8 Gallery 100 4.3.9 TabHost 101 4.4 高级图形用户界面技术 104 4.4.1 图形系统类结构 104 4.4.2 常用布局类 107 4.4.3 绘制图形 114 4.4.4 构建自己的组件 123 4.5 图形动画 130 4.5.1 Animation 131 4.5.2 Interpolator 136 4.5.3 AnimationSet 137 4.5.4 自定义动画 138 4.6 Resource介绍 143 4.6.1 资源类型 143 4.6.2 使用资源 144 4.6.3 资源适配 146 4.7 俄罗斯方块实例 147 4.7.1 方块的数据结构 147 4.7.2 方块渲染 150 4.7.3 游戏区域设计 152 4.7.4 碰撞检测 156 4.7.5 输入处理 158 4.7.6 积分排行榜 160 4.8 小结 161 第5章 OpenGL ES编程 162 5.1 OpenGL ES概述 162 5.1.1 OpenGL ES设计准则 162 5.1.2 OpenGL ES 与OpenGL的不同 163 5.1.3 一个简单的OpenGL ES程序 166 5.2 3D观察与变换 169 5.2.1 一个简单的例子:绘制立方体 169 5.2.2 理解变换 175 5.2.3 投影变换 177 5.2.4 视口变换 179 5.2.5 矩阵堆栈 180 5.3 绘制图元 180 5.3.1 图元种类 180 5.3.2 指定顶点数据 182 5.3.3 绘制图元 186 5.4 颜色和光照 186 5.4.1 设置颜色和材质 187 5.4.2 光照 188 5.5 光栅化和片元处理 193 5.5.1 背面剪裁 193 5.5.2 纹理映射 193 5.5.3 雾 205 5.5.4 反走样 207 5.5.5 像素测试 209 5.5.6 将片元合并到颜色缓存 212 5.6 帧缓存操作 216 5.6.1 清空缓存 216 5.6.2 读取颜色缓存 216 5.6.3 强制完成绘图指令 217 5.7 其他 217 5.7.1 行为控制函数 217 5.7.2 状态查询 218 5.8 EGL简介 218 5.9 小结 222 第6章 数据持久化存储 223 6.1 文件存储 223 6.1.1 存储至默认文件夹 224 6.1.2 存储至指定文件夹 226 6.1.3 存储至SD卡 227 6.1.4 读取资源文件 228 6.2 SharePreference 229 6.3 SQLite 233 6.3.1 创建数据库 234 6.3.2 SQLiteOpenHelper 236 6.3.3 创建触发器 240 6.3.4 创建索引 241 6.3.5 创建视图 241 6.3.6 操作数据 243 6.3.7 将Cursor绑定到AdapterView 250 6.4 Content Provider 254 6.4.1 概述 254 6.4.2 Content Provider加载机制 256 6.4.3 创建Content Provider 257 6.4.4 Content Provider更新的通知机制 267 6.4.5 DAO接口及实现 269 6.4.6 在新线程内处理数据 270 6.5 小结 273 第7章 移动多媒体编程 274 7.1 多媒体文件格式与编码 274 7.1.1 多媒体文件格式 274 7.1.2 编码 275 7.1.3 OPhone平台支持的媒体格式 276 7.1.4 选择合适的媒体文件 277 7.2 音频和视频播放 277 7.2.1 三种不同的数据源 278 7.2.2 MediaPlayer的状态 281 7.2.3 音乐播放器实例 284 7.2.4 播放视频 296 7.3 录制音频 299 7.3.1 MediaRecorder的状态图 299 7.3.2 录音器实例 301 7.4 MP3文件格式分析 306 7.4.1 MP3文件介绍 307 7.4.2 ID3V1标签 307 7.4.3 ID3V2标签 310 7.4.4 MP3帧结构 316 7.4.5 分割MP3文件 323 7.5 案例分析——铃声DIY 327 7.6 小结 329 第8章 让程序在后台运行 330 8.1 Service概述 330 8.2 Service编程实践 331 8.2.1 创建Service 331 8.2.2 启动和停止Service 333 8.2.3 通知用户 335 8.2.4 不阻塞用户操作 337 8.2.5 Service与Activity通信 343 8.3 后台播放音乐 345 8.3.1 跨进程调用 345 8.3.2 创建AIDL接口文件 346 8.3.3 实现AIDL接口 347 8.3.4 绑定Service 351 8.3.5 调用IPC方法 352 8.4 小结 353 第9章 访问网络数据和服务 354 9.1 HTTP协议简介 354 9.1.1 HTTP协议的主要特点 354 9.1.2 HTTP连接过程 355 9.1.3 HTTP消息格式 355 9.2 线程管理 358 9.2.1 匿名Thread 358 9.2.2 java.util.concurrent框架 359 9.2.3 AsyncTask 369 9.3 网络编程接口 373 9.3.1 HttpClient API介绍 373 9.3.2 GET方法的使用和限制 378 9.3.3 使用POST方法上传附件 382 9.3.4 从服务器端下载图片 390 9.4 设计C/S通信数据格式 392 9.4.1 对象序列化 396 9.4.2 使用XML传输对象 401 9.5 小结 409 第10章 高级通信技术 410 10.1 电话 410 10.1.1 电话呼叫 410 10.1.2 监听电话状态 412 10.1.3 查询电话属性 416 10.1.4 读取通话记录 416 10.2 短消息 420 10.2.1 发送短信 421 10.2.2 接收短消息 423 10.3 小结 426 第11章 访问硬件层 427 11.1 访问相机 427 11.1.1 创建Camera对象 427 11.1.2 设置Camera参数 428 11.1.3 预览 429 11.1.4 拍摄照片 429 11.2 访问位置服务 431 11.2.1 创建LocationManager 431 11.2.2 LocationProvider类 432 11.2.3 监听位置更新 433 11.2.4 接近警报 434 11.3 访问传感器 435 11.3.1 SensorManager类 435 11.3.2 监听传感器事件 436 11.3.3 方向传感器应用—指南针 437 11.3.4 模拟传感器 440 11.4 小结 443 附录A 如何导入源代码 444 附录B Resin安装与Servlet部署 446 参考文献 450
第1章 新一代的王者——android概览 1 1.1 智能手机市场现状 1 1.1.1 五大智能手机操作系统 1 1.1.2 智能手机市场的新星 2 1.2 android平台的特点及未来的趋势 3 1.2.1 全新理念带来的体验风暴 3 1.2.2 中国手机市场的主导性作用 4 1.2.3 手机3d游戏和应用增长迅速 4 1.3 如何搭建android开发环境 4 1.3.1 sdk的安装及环境配置 5 1.3.2 eclipse集成开发环境的搭建 7 1.3.3 创建并启动模拟器 9 1.4 hello android应用程序的开发 11 1.4.1 第一个android应用程序 12 1.4.2 android应用程序的项目结构 14 1.4.3 android应用程序的调试 16 1.4.4 实际设备的联机调试 18 1.5 android应用程序运行的机制 19 1.5.1 应用程序的系统架构 19 .1.5.2 应用程序框架 20 1.5.3 android运行时 20 1.5.4 系统库 21 1.5.5 底层linux内核 21 1.6 本章小结 22 第2章 游戏开发相关android基础知识 23 2.1 游戏中的音效 23 2.1.1 游戏中的即时音效 23 2.1.2 即时音效的一个案例 24 2.1.3 背景音乐播放技术 27 2.1.4 简易音乐播放器的实现 29 2.2 简单数据的存储——preferences 33 2.2.1 preferences简介 33 2.2.2 preferences实现访问时间的记录 33 2.3 手机自带数据库——sqlite 34 2.3.1 初识sqlite 35 2.3.2 sqlite数据库的基本操作 35 2.3.3 sqlite数据库的简单案例 37 2.3.4 使用contentprovider组件共享数据 40 2.3.5 使用contentresolver获取分享数据 42 2.4 文件i/o 43 2.4.1 访问sd卡中的文件 44 2.4.2 访问手机中的文件夹 46 2.4.3 读取assets文件夹下的内容 48 2.5 2d动画的开发 50 2.5.1 surfaceview用法简介 50 2.5.2 使用surfaceview实现2d动画 50 2.6 socket网络通信 56 2.6.1 socket开发基本知识 56 2.6.2 服务器端 57 2.6.3 客户端 58 2.7 蓝牙通信 59 2.7.1 蓝牙通信的基本知识 60 2.7.2 聊天案例概览 60 2.7.3 聊天案例的开发过程 62 2.8 本章小结 75 第3章 初识opengl es 2.0 77 3.1 opengl es 2.0概览 77 3.1.1 opengl es 2.0简介 77 3.1.2 初识opengl es 2.0应用程序 80 3.2 着色器与渲染管线 89 3.2.1 opengl es 1.x的渲染管线 89 3.2.2 opengl es 2.0的渲染管线 94 3.2.3 opengl es中立体物体的构建 97 3.3 主流android手机gpu大pk 98 3.3.1 手机gpu四大家族对比 99 3.3.2 主流gpu的性能参数比较 103 3.4 本章小结 104 第4章 着色语言shading language 105 4.1 着色语言概述 105 4.2 着色语言基础 106 4.2.1 数据类型概述 106 4.2.2 数据类型的基本使用 110 4.2.3 运算符 112 4.2.4 类型转换 114 4.2.5 限定符 115 4.2.6 流程控制 119 4.2.7 函数的声明与使用 121 4.2.8 片元着色器中浮点变量精度的指定 122 4.2.9 程序的基本结构 123 4.3 特殊的内建变量 123 4.3.1 顶点着色器中的内建变量 124 4.3.2 片元着色器中的内建变量 124 4.4 着色语言的内置函数 125 4.4.1 角度转换与三角函数 126 4.4.2 指数函数 127 4.4.3 常见函数 127 4.4.4 几何函数 130 4.4.5 矩阵函数 132 4.4.6 向量关系函数 133 4.4.7 纹理采样函数 134 4.4.8 微分函数 135 4.5 本章小结 135 第5章 投影及各种变换 136 5.1 摄像机的设置 136 5.2 两种投影方式 137 5.2.1 正交投影 137 5.2.2 透视投影 145 5.3 各种变换 148 5.3.1 基本变换的相关数学知识 148 5.3.2 平移变换 148 5.3.3 旋转变换 152 5.3.4 缩放变换 153 5.3.5 基本变换的实质 155 5.4 绘制方式 156 5.4.1 各种绘制方式概览 156 5.4.2 点与线段绘制方式 157 5.4.3 三角形条带与扇面绘制方式 159 5.4.4 顶点法与索引法 165 5.5 设置合理的视角 167 5.6 卷绕和背面剪裁 173 5.6.1 基本知识 173 5.6.2 一个简单的案例 174 5.7 本章小结 176 第6章 光照 177 6.1 曲面物体的构建 177 6.1.1 球体构建的基本原理 177 6.2.2 案例效果概览 178 6.2.3 开发步骤 179 6.2 基本光照效果 182 6.2.1 光照的基本模型 182 6.2.2 环境光 183 6.2.3 散射光 185 6.2.4 镜面光 190 6.2.5 三种光照通道的合成 194 6.3 定位光与定向光 196 6.4 点法向量和面法向量 199 6.5 光照的每顶点计算与每片元计算 202 6.6 本章小结 204 第7章 纹理映射 205 7.1 初识纹理映射 205 7.1.1 基本原理 205 7.1.2 纹理映射的简单案例 206 7.2 纹理拉伸 212 7.2.1 两种拉伸方式概览 212 7.2.2 不同拉伸方式的案例 214 7.3 纹理采样 217 7.3.1 纹理采样概述 217 7.3.2 最近点采样 218 7.3.3 线性纹理采样 219 7.3.4 min与mag采样 220 7.3.5 不同纹理采样方式的案例 221 7.4 mipmap纹理技术 226 7.5 多重纹理与过程纹理 227 7.5.1 案例概览 227 7.5.2 将2d纹理映射到球面上的策略 228 7.5.3 案例的场景结构 229 7.5.4 开发过程 230 7.6 本章小结 238 第8章 3d基本形状的构建 239 8.1 圆柱体 239 8.1.1 顶点原始位置的生成 239 8.1.2 案例的开发 241 8.2 圆锥体 244 8.2.1 顶点原始位置的生成 244 8.2.2 案例的开发 246 8.3 圆环体 248 8.3.1 顶点原始位置的生成 248 8.3.2 案例的开发 249 8.4 螺旋管 251 8.4.1 顶点原始位置的生成 252 8.4.2 案例的开发 252 8.5 几何球 253 8.5.1 顶点原始位置的生成 254 8.5.2 案例的开发 255 8.6 足球碳分子模型的搭建 262 8.6.1 搭建的基本原理 262 8.6.2 案例的开发 264 8.7 贝塞尔曲线及旋转面 270 8.7.1 三维旋转曲面的生成 270 8.7.2 贝塞尔曲线 270 8.7.3 bezier曲线生成工具 272 8.7.4 印度古典建筑场景的开发 274 8.8 本章小结 276 第9章 3d模型加载 277 9.1 obj模型文件概览 277 9.1.1 obj文件的格式 277 9.1.2 用3dmax设计3d模型 278 9.2 加载obj文件 279 9.2.1 加载仅有顶点坐标与面数据的obj文件 279 9.2.2 加载后自动计算面法向量 283 9.2.3 加载后自动计算平均法向量 286 9.2.4 加载纹理坐标 289 9.3 本章小结 292 第10章 混合与雾 293 10.1 混合技术 293 10.1.1 混合基本知识 293 10.1.2 源因子和目标因子 294 10.1.3 简单混合效果案例 295 10.2 地月系云层效果的实现 297 10.3 雾 300 10.3.1 雾的原理与优势 300 10.3.2 雾的简单实现 301 10.4 本章小结 304 第11章 常用3d开发技巧 305 11.1 标志板 305 11.1.1 案例效果与基本原理 305 11.1.2 开发步骤 306 11.2 灰度图地形 310 11.2.1 基本原理 311 11.2.2 普通灰度图地形 311 11.2.3 过程纹理地形 314 11.2.4 mipmap地形 317 11.3 天空盒与天空穹 318 11.3.1 天空盒 318 11.3.2 天空穹 320 11.3.3 天空盒与天空穹的使用技巧 321 11.4 镜像技术 322 11.4.1 镜像基本原理 322 11.4.2 基本效果案例 322 11.4.3 升级效果案例 325 11.5 动态文本输出 327 11.5.1 案例效果与基本原理 327 11.5.2 具体开发步骤 328 11.6 非真实感绘制 330 11.6.1 案例效果与基本原理 330 11.6.2 具体开发步骤 331 11.7 本章小结 332 第12章 几种剪裁与测试 333 12.1 剪裁测试 333 12.1.1 基本原理与核心代码 333 12.1.2 一个主次视角的简单案例 334 12.2 alpha测试 335 12.2.1 alpha测试基本原理 335 12.2.2 一个椭圆窗口的案例 335 12.3 模板测试 337 12.3.1 基本原理 337 12.3.2 一个简单的案例 340 12.4 任意剪裁平面 341 12.4.1 基本原理 341 12.4.2 茶壶被任意平面剪裁的案例 342 12.5 本章小结 344 第13章 顶点着色器的妙用 345 13.1 飘扬的旗帜 345 13.1.1 基本原理 345 13.1.2 开发步骤 346 13.2 扭动的软糖 349 13.2.1 基本原理 349 13.2.2 开发步骤 350 13.3 风吹椰林场景的开发 351 13.3.1 椰子树随风摇摆的基本原理 351 13.3.2 开发步骤 352 13.4 展翅飞翔的雄鹰 356 13.4.1 基本原理 356 13.4.2 开发步骤 357 13.5 二维扭曲 359 13.5.1 基本原理 359 13.5.2 开发步骤 360 13.6 opengl es 1.x与opengl es 2.0实现方案的对比 363 13.7 本章小结 364 第14章 片元着色器的妙用 365 14.1 程序纹理技术 365 14.1.1 砖块着色器 365 14.1.2 沙滩球着色器 367 14.2 数字图像处理 368 14.2.1 卷积的基本知识 369 14.2.2 平滑过滤 369 14.2.3 边缘检测 371 14.2.4 锐化处理 372 14.2.5 浮雕效果 373 14.2.6 图像渐变 374 14.3 分形着色器 375 14.3.1 曼德布罗集简介 375 14.3.2 曼德布罗集着色器的实现 376 14.3.3 将曼德布罗集纹理应用到实际物体上 378 14.3.4 茱莉亚集着色器的实现 379 14.4 本章小结 380 第15章 真实光学环境的模拟 381 15.1 投影贴图 381 15.1.1 案例效果与基本原理 381 15.1.2 开发步骤 382 15.2 反射环境模拟 385 15.2.1 案例效果与基本原理 385 15.2.2 开发步骤 386 15.3 折射环境模拟 388 15.3.1 案例效果与基本原理 388 15.3.2 开发步骤 390 15.4 色散效果的模拟 391 15.4.1 案例效果与基本原理 391 15.4.2 开发步骤 392 15.5 菲涅尔效果的模拟 393 15.5.1 案例效果与基本原理 393 15.5.2 开发步骤 394 15.6 凹凸映射 395 15.6.1 案例效果与基本原理 395 15.6.2 法向量纹理图的生成 396 15.6.3 案例的开发 399 15.7 平面阴影 404 15.7.1 案例效果与基本原理 405 15.7.2 开发步骤 406 15.8 阴影映射 409 15.8.1 案例效果与基本原理 409 15.8.2 距离纹理图的生成 411 15.8.3 阴影场景的绘制 417 15.9 光线跟踪 419 15.9.1 案例效果与基本原理 419 15.9.2 开发步骤 423 15.10 本章小结 436 第16章 游戏开发中的物理学 437 16.1 碰撞检测基本技术 437 16.1.1 aabb包围盒的基本原理 437 16.1.2 aabb包围盒的计算 438 16.1.3 aabb包围盒的碰撞检测 440 16.1.4 一个aabb包围盒的案例 442 16.1.5 旋转后的aabb包围盒 444 16.1.6 aabb包围盒的使用要点 448 16.1.7 obb包围盒 448 16.2 穿透效应 449 16.2.1 案例的运行效果与基本原理 449 16.2.2 具体开发步骤 450 16.3 粒子系统 450 16.3.1 案例运行效果与基本原理 451 16.3.2 cpu版案例的开发 452 16.3.3 gpu版案例开发步骤 453 16.4 弹簧质点模型 455 16.4.1 案例运行效果与基本原理 455 16.4.2 具体开发步骤 457 16.5 本章小结 462 第17章 游戏的心脏——物理引擎 463 17.1 物理引擎很重要 463 17.1.1 什么是物理引擎 463 17.1.2 常见的物理引擎 463 17.2 jbullet物理引擎 466 17.2.1 基本的物理学概念 466 17.2.2 jbullet中常用类的介绍 468 17.3 箱子相互碰撞的案例 475 17.3.1 案例运行效果及准备工作 476 17.3.2 案例的基本框架结构 476 17.3.3 常量类——constant 477 17.3.4 3d场景渲染类——mysurfaceview 478 17.3.5 水平地面——texfloor类 480 17.3.6 箱子——texcube类 481 17.4 复合碰撞形状的使用 483 17.4.1 案例运行效果 483 17.4.2 立方体圆柱复合形状——cubecylinder类 483 17.5 凹凸地形的案例 486 17.5.1 案例运行效果 486 17.5.2 地形类——landform 486 17.6 任意形状物体的碰撞 488 17.6.1 案例运行效果 488 17.6.2 加载物体类——loadedobjectvertexnormal 488 17.6.3 加载物体刚体类——loadrigidbody 490 17.7 铰链关节 491 17.7.1 铰链关节的基本知识 491 17.7.2 案例的运行效果 492 17.7.3 铰链关节旋转角速度的计算 493 17.7.4 3d界面渲染类——mysurfaceview 494 17.8 滑动关节 496 17.8.1 滑动关节的基本知识 496 17.8.2 案例效果图 497 17.8.3 3d界面渲染类——mysurfaceview 498 17.9 六自由度关节 502 17.9.1 六自由度关节的基本知识 502 17.9.2 案例的运行效果 503 17.9.3 人偶类——doll 503 17.9.4 拾取时采用的点对点关节 505 17.10 本章小结 509 第18章 传感器应用的开发 510 18.1 基本的开发流程 510 18.2 加速度传感器 512 18.2.1 加速度传感器简介 513 18.2.2 案例的开发 514 18.3 磁场传感器 514 18.3.1 磁场传感器简介 514 18.3.2 案例的开发 514 18.4 光传感器 516 18.4.1 光传感器简介 516 18.4.2 案例的开发 516 18.5 温度传感器 518 18.5.1 温度传感器简介 518 18.5.2 案例的开发 518 18.6 接近传感器 519 18.6.1 接近传感器简介 519 18.6.2 案例的开发 520 18.7 姿态传感器 521 18.7.1 姿态传感器简介 521 18.7.2 案例的开发 522 18.8 本章小结 528 第19章 游戏开发小贴士 529 19.1 3d拾取技术 529 19.1.1 案例效果与基本原理 529 19.1.2 开发步骤 531 19.2 多点触控 537 19.2.1 案例效果与基本原理 537 19.2.2 开发步骤 538 19.3 多键监听 541 19.3.1 案例效果与基本原理 541 19.3.2 开发步骤 542 19.4 本章小结 544 第20章 bn赛艇 545 20.1 游戏背景及功能概述 545 20.1.1 背景概述 545 20.1.2 功能介绍 545 20.2 游戏的策划及准备工作 547 20.2.1 游戏的策划 547 20.2.2 android平台下游戏的准备工作 548 20.3 游戏的架构 552 20.3.1 各个类简要介绍 553 20.3.2 游戏框架简介 558 20.4 主控制类myactivity 559 20.5 2d界面相关类 563 20.5.1 欢迎界面类welcomeview 563 20.5.2 2d界面父类mysfview 565 20.5.3 主菜单类menuview 565 20.5.4 2d界面绘制类viewfordraw 566 20.5.5 数据库工具类dbutil 568 20.5.6 android系统版本对话框androidversiondialog 570 20.6 选船界面相关类 570 20.6.1 着色器管理类shadermanager 571 20.6.2 围墙类colorlightrect 571 20.6.3 选船房间类housefordraw 573 20.6.4 展台类displaystation 575 20.6.5 赛艇类boat 576 20.6.6 选船界面xcsurfaceview 576 20.7 游戏界面相关类 582 20.7.1 进度条类process 583 20.7.2 3d物体父类bndrawer 584 20.7.3 3d物体控制类tdobjectforcontrol 584 20.7.4 赛艇类boat 585 20.7.5 可碰撞物体父类kzbjdrawer 586 20.7.6 可碰撞物体控制类kzbjforcontr
|--Activity不允许横竖屏切换 |--Activity常用小技巧 |--Activity按返回直接回到桌面 |--aidl之结合反射获取应用缓存大小等空间占用 |--aidl调用系统service未公开的方法挂电话 |--aidl调用系统未公开的方法代码示例2 |--android dp和px之间转换 |--android INSTALL_PARSE_FAILED_MANIFEST_MALFORMED |--android root下禁用组件 |--android 判断网络状态 |--android 对话框样式 |--android 开机启动 |--android 挪动dialog的位置 |--android 控制对话框位置 |--android 根据uri获取路径 |--android 模拟器错误 |--android 横竖屏切换 |--android 获取mac地址 |--android 获取sd卡状态 |--android 设置apn |--android 调节屏幕亮度 |--android 资源uri |--android 还原短信 |--android 重启 |--android中anim文件特效 |--app信息menifest获取(如版本号) |--AsyncQueryHandler之异步查询Cursor处理 |--AutoCompleteTextView自动提示的用法 |--BitMap、Drawable、inputStream及byte[] 互转 |--ContentProvider内容提供者定义 |--DatePicker日期控件 |--desktop |--Dialog之位置的挪动与控制 |--Dialog实现无标提栏及自定义风格 |--Dialog风格Activity的作法 |--ExpandableListView(下拉伸缩ListView) |--GridView表格布局的用法 |--httpclient超时 |--info体系 |--Intent启动应用apk安装 |--Intent常用功能 |--IO将输入流转成字节 |--Json读js资源文件 |--layout布局样式之style配置 |--listview 页面 图片加文字 |--ListView之CursorAdapter异步查询框架之短信 |--ListView之动态添加子view |--ListView优化之分页加载 |--ListView优化之动态加载 |--ListView优化之控制getView实现复杂显示 |--ListView优化之标准写法 |--listview老虎机 界面设计 水果机 |--listview页面跳转 数据库交互 事务 dao biz 层 |--Log的收集 |--Manager下的info |--Manager之ActivityManager进程管理 |--Manager之LocationManager |--Manager之PackageManager |--Menu之不同模式下显示不同菜单 |--openGL-ES上绘制文字 |--openGL-ES纹理贴图 |--openGL-ES获取帧率 |--openGL-ES雾化 |--PopupWindow的使用 |--PopupWindow的返回健关闭 |--RadioGroup的用法(里面的成员可以是任何view) |--SD卡之计算剩余空间 |--Spinner下拉菜单组件 |--SplashActivity |--StringUtils工具类的常用方法 |--TabHost一个界面显示多Activity |--TextView单行跑马灯效果 |--TextView虚拟获得焦点 |--uploadServlet |--uri之表示资源resource |--ViewPage的使用 |--view中的tag用法之存储对象 |--view常用属性 |--xml常用属性 |--xml文件的pull解析与序列化写入 |--xml的封装序列化 |--任务循环之只在Activity显示时执行 |--修改文件的最后修改时间 |--偏好设置(回显) |--内存优化之各种方法 |--内容提供者之短信的序列化对象读写 |--内容提供者之短信的获取与写入 |--内容提供者之联系人读写与批量操作 |--内容提供者之获取通话记录 |--内容提供者的定义 |--写入联系人信息 |--利用FinalHttp实现多线程断点续传 |--加密之MD5 |--动画Animation详解 |--动画之view左右抖动 |--动画之移动动画 |--动画之组合动画 |--动画之缩放动画ScaleAnimation |--反序列化对象 |--发送短信 读天气 调音量 |--回调函数的定义 |--图片之BitMap、Drawable、inputStream及byte[] 互转 |--图片之保存图片至SD卡 |--图片之删除40%最近没有被使用的 |--图片之的本地缓存至SD卡 |--图片之网络异步下载图片 |--图片之获取SD卡所有及边界可调及压缩和软引用和内存回收 |--图片的LRU算法内存保存和读取 |--图片的缩放处理(防内存溢出) |--多媒体应用设计图 |--多线程下载 |--多线程下载及断点续传 |--多线程之AsyncTask的用法 |--多线程之线程池ExecutorService |--字体为粗体 |--安卓下的多线程断点上传 |--对话框与进度条结合用法 |--屏幕之Activity全屏 |--屏幕之横竖屏切换 |--屏幕之调节屏幕亮度 |--屏幕相关之Display类获取屏幕尺寸和分辨率 |--屏幕适配之ScrollView |--屏幕适配之像素dp和px之间转换 |--工具类之Log的封装类 |--工具类之不同log打印的封装 |--工具类之开启新的Activity |--布局加载器的获取 |--广播接收者之开机启动 |--广播接收者之获取管理员权限 |--广播接收者代码注册与卸载 |--广播接收者常用广播的获取 |--应用之分享(隐式意图) |--应用之卸载(隐式意图) |--应用之安装(隐式意图) |--应用之完美退出 |--应用之获取名称和图标 |--应用之获得占用内存大小 |--应用之通过包名开启一个应用 |--应用之隐式意图开启设置界面 |--应用启动之检查版本更新及初始化 |--延时任务的工具类 |--异常之UncaughtExceptionHandler全局捕获处理 |--异步任务AsyncTask的用法 |--异步任务的自定义 |--快捷方式增删查 |--手势识别器GestureDetector的用法 |--拍照之调用系统相机并显示及保存 |--拨打电话 |--按健之长按menu事件屏蔽 |--按健监听按返回健回桌面 |--搜索之调用系统Searchable的用法 |--数据库CURD通过execSQL与rawQuery |--数据库SQLiteOpenHelper标准写法 |--数据库复杂多表查询 |--数据库查询之归属地 |--数据库直接CURD |--数据提交无需权限 |--文件之从服务器下载 |--文件之拷贝文件至某个目录 |--文件之指定编码读写文件 |--文件之释放Assets下的文件到应用的File目录 |--文件之随机存储RandomAccessFile |--文件使用时间排序 |--文件复制粘贴 |--文件路径之通过uri获取 |--时间java常用应用 |--时间之handle记时器 |--时间之time的用法得到特定时间的long值 |--时间之之定时任务TimerTask |--时间之倒计时CountDownTimer |--时间之当前时间动态显示 |--时间之自动任务ScheduledExecutorService |--时间之记时器 |--时间日期格式化 |--服务之判断是否处于运行状态 |--服务之定义录音机 |--服务之应用内绑定服务调用方法 |--服务之电话录音 |--服务之看门狗代码示例 |--格式化之DecimalFormat数字格式化 |--桌面快捷方式的添加代码示例 |--桌面控件widget的创建方法 |--模拟发短信 指定号码 短信窃听提示 |--消息机制 mesage looper |--滑动之左右滑动的两种定义 |--电话簿读取联系人信息 |--监听 |--监听之CheckBox是否选中监听 |--监听之EditText内容变化监听 |--监听之GridView条目点击监听 |--监听之ListView条目点击事件监听 |--监听之ListView滑动监听 |--监听之单击监听的两种定义 |--监听之双击监听 |--监听之电话状态监听 |--监听之触摸监听 |--短信之根据id删除及查询短信 |--短信发送小demo |--短信的截取 |--系统之SD卡清理 |--系统之获取所有开机启动应用 |--系统之重启实现 |--系统信息之获取SD卡内存信息 |--系统信息之获取动态内存RAM信息 |--系统信息之获取可用内存 |--系统信息之获得mac地址 |--系统信息之获得手机sim卡序列号 |--缓存优化之几种方案lastModified |--缓存优化之本地缓存优化(超过规定值或SD卡容量不够时) |--网络post提交查询请求 |--网络之HttpClient的get和post用法 |--网络之判断网络状态是否可用 |--网络之设置apn |--网络图片查看器 |--网络图片的下载与缓存 |--网络文件的下载与关联进度条 |--联系人之各种查找 |--联系人读写与批量操作 |--联系人读取 |--自定义shape形状颜色渐变资源 |--自定义Toast |--自定义view的属性 |--自定义下拉刷新ListView |--自定义动画资源 |--自定义常用小控件 |--自定义控件之小技巧 |--自定义控件风格和全局背景 |--自定义组合控件 |--自定义配置文件资源 |--自定义颜色状态选择资源 |--自定义颜色资源 |--获取网页的源码 |--读取外部资源的文件3种方式 |--读取手机内的短信 |--通信之Application实现应用全局通信 |--重启adb |--隐式转换 页面 |--震动效果的实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值