mysqlmysql修改waittimeout知多少

深入理解JDBC的超时(timeout)设置
真实案例:应用服务器在遭到DDos攻击后无法响应&
在遭到DDos攻击后,整个服务都垮掉了。由于第四层交换机不堪重负,网络变得无法连接,从而导致业务系统也无法正常运转。安全组很快屏蔽了所有的DDos攻击,并恢复了网络,但业务系统却还是无法工作。 通过分析系统的thread dump发现,业务系统停在了JDBC API的调用上。20分钟后,系统仍处于WAITING状态,无法响应。30分钟后,系统抛出异常,服务恢复正常。&
为什么我们明明将query timeout设置成了3秒,系统却持续了30分钟的WAITING状态?为什么30分钟后系统又恢复正常了? 当你对理解了JDBC的超时设置后,就能找到问题的答案。&
为什么我们要了解JDBC?&当 遇到性能问题或系统出错时,业务系统和数据库通常是我们最关心的两个部分。在公司里,这两个部分是交由两个不同的部门来负责的,因此各个部门都会集中精力 地在自身领域内寻找问题,这样的话,在业务系统和数据库之间的部分就会成为一个盲区。对于Java应用而言,这个盲区就是DBCP数据库连接池和 JDBC,本文将集中介绍JDBC。&
什么是JDBC?&
JDBC是Java应用中用来连接关系型数据库的标准API。Sun公司一共定义了4种类型的JDBC,我们主要使用的是第4种,该类型的Driver完全由Java代码实现,通过使用socket与数据库进行通信。&
图1 JDBC Type 4.
第 4种类型的JDBC通过socket对字节流进行处理,因此也会有一些基本网络操作,类似于HttpClient这种用于网络操作的代码库。当在网络操作 中遇到问题的时候,将会消耗大量的cpu资源,并且失去响应超时。如果你之前用过HttpClient,那么你一定遇到过未设置timeout造成的错 误。同样,第4种类型的JDBC,若没有合理地设置socket timeout,也会有相同的错误——连接被阻塞。&接下来,就让我们来学习一下如何正确地设置socket timeout,以及需要考虑的问题。&
应用与数据库间的timeout层级&
图2 Timeout Class.
上图展示了简化后应用与数据库间的timeout层级。(译者注:WAS/BLOC是作者公司的具体应用名称,无需深究)&高 级别的timeout依赖于低级别的timeout,只有当低级别的timeout无误时,高级别的timeout才能确保正常。例如,当socket timeout出现问题时,高级别的statement timeout和transaction timeout都将失效。&我们收到的很多评论中提到:&
即使设置了statement timeout,当网络出错时,应用也无法从错误中恢复。
statement timeout无法处理网络连接失败时的超时,它能做的仅仅是限制statement的操作时间。网络连接失败时的timeout必须交由JDBC来处理。&JDBC的socket timeout会受到操作系统socket timeout设置的影响,这就解释了为什么在之前的案例中,JDBC连接会在网络出错后阻塞30分钟,然后又奇迹般恢复,即使我们并没有对JDBC的socket timeout进行设置。&
DBCP 连接池位于图2的左侧,你会发现timeout层级与DBCP是相互独立的。DBCP负责的是数据库连接的创建和管理,并不干涉timeout的处理。当 连接在DBCP中创建,或是DBCP发送校验query检查连接有效性的时候,socket timeout将会影响这些过程,但并不直接对应用造成影响。&当在应用中调用DBCP的getConnection()方法时,你可以设置获取数据库连接的超时时间,但是这和JDBC的timeout毫不相关。&
图3 Timeout for Each Levels.
什么是Transaction Timeout?&
transaction timeout一般存在于框架(Spring, EJB)或应用级。transaction timeout或许是个相对陌生的概念,简单地说,transaction timeout就是“statement Timeout * N(需要执行的statement数量) + @(垃圾回收等其他时间)”。transaction timeout用来限制执行statement的总时长。&例 如,假设执行一个statement需要0.1秒,那么执行少量statement不会有什么问题,但若是要执行100,000个statement则需 要10,000秒(约7个小时)。这时,transaction timeout就派上用场了。EJB CMT (Container Managed Transaction)就是一种典型的实现,它提供了多种方法供开发者选择。但我们并不使用EJB,Spring的transaction timeout设置会更常用一些。在Spring中,你可以使用下面展示的XML或是在源码中使用@Transactional注解来进行设置。&
&tx:attributes&&&
&&&&&&&&&tx:method&name=“…”&timeout=“3″/&&&
&/tx:attributes&&&
Spring提供的transaction timeout配置非常简单,它会记录每个事务的开始时间和消耗时间,当特定的事件发生时就会对消耗时间做校验,当超出timeout值时将抛出异常。&Spring 中,数据库连接被保存在ThreadLocal里,这被称为事务同步(Transaction Synchronization),与此同时,事务的开始时间和消耗时间也被保存下来。当使用这种代理连接创建statement时,就会校验事务的消耗 时间。EJB CMT的实现方式与之类似,其结构本身也十分简单。&当 你选用的容器或框架并不支持transaction timeout这一特性,你可以考虑自己来实现。transaction timeout并没有标准的API。Lucy框架的1.5和1.6版本都不支持transaction timeout,但是你可以通过使用Spring的Transaction Manager来达到与之同样的效果。&假设某个事务中包含5个statement,每个statement的执行时间是200ms,其他业务逻辑的执行时间是100ms,那么transaction timeout至少应该设置为1,100ms(200 * 5 + 100)。&
什么是Statement Timeout?&statement timeout用来限制statement的执行时长,timeout的值通过调用JDBC的 java.sql.Statement.setQueryTimeout(int timeout) API进行设置。不过现在开发者已经很少直接在代码中设置,而多是通过框架来进行设置。&以 iBatis为例,statement timeout的默认值可以通过sql-map-config.xml中的defaultStatementTimeout 属性进行设置。同时,你还可以设置sqlmap中select,insert,update标签的timeout属性,从而对不同sql语句的超时时间进 行独立的配置。&如果你使用的是Lucy1.5或1.6版本,通过设置queryTimeout属性可以在datasource层面对statement timeout进行设置。&statement timeout的具体值需要依据应用本身的特性而定,并没有可供推荐的配置。&
JDBC的statement timeout处理过程&不同的关系型数据库,以及不同的JDBC驱动,其statement timeout处理过程会有所不同。其中,Oracle和MS SQLServer的处理相类似,MySQL和CUBRID类似。&
Oracle JDBC Statement的QueryTimeout处理过程&1. 通过调用Connection的createStatement()方法创建statement&2. 调用Statement的executeQuery()方法&3. statement通过自身connection将query发送给Oracle数据库&4. statement在OracleTimeoutPollingThread(每个classloader一个)上进行注册&5. 达到超时时间&6. OracleTimeoutPollingThread调用OracleStatement的cancel()方法&7. 通过connection向正在执行的query发送cancel消息&
图4 Query Timeout Execution Process for Oracle JDBC Statement.
JTDS (MS SQLServer) Statement的QueryTimeout处理过程&1. 通过调用Connection的createStatement()方法创建statement&2. 调用Statement的executeQuery()方法&3. statement通过自身connection将query发送给MS SqlServer数据库&4. statement在TimerThread上进行注册&5. 达到超时时间&6. TimerThread调用JtdsStatement实例中的TsdCore.cancel()方法&7. 通过ConnectionJDBC向正在执行的query发送cancel消息&
图5 QueryTimeout Execution Process for JTDS (MS SQLServer) Statement.
MySQL JDBC Statement的QueryTimeout处理过程&1. 通过调用Connection的createStatement()方法创建statement&2. 调用Statement的executeQuery()方法&3. statement通过自身connection将query发送给MySQL数据库&4. statement创建一个新的timeout-execution线程用于超时处理&5. 5.1版本后改为每个connection分配一个timeout-execution线程&6. 向timeout-execution线程进行注册&7. 达到超时时间&6. TimerThread调用JtdsStatement实例中的TsdCore.cancel()方法&7. timeout-execution线程创建一个和statement配置相同的connection&8. 使用新创建的connection向超时query发送cancel query(KILL QUERY “connectionId”)&
图6 QueryTimeout Execution Process for MySQL JDBC Statement (5.0.8).
CUBRID JDBC Statement的QueryTimeout处理过程&1. 通过调用Connection的createStatement()方法创建statement&2. 调用Statement的executeQuery()方法&3. statement通过自身connection将query发送给CUBRID数据库&4. statement创建一个新的timeout-execution线程用于超时处理&5. 5.1版本后改为每个connection分配一个timeout-execution线程&6. 向timeout-execution线程进行注册&7. 达到超时时间&6. TimerThread调用JtdsStatement实例中的TsdCore.cancel()方法&7. timeout-execution线程创建一个和statement配置相同的connection&8. 使用新创建的connection向超时query发送cancel消息&
图7 QueryTimeout Execution Process for CUBRID JDBC Statement.
什么是JDBC的socket timeout?&第4种类型的JDBC使用socket与数据库连接,数据库并不对应用与数据库间的连接超时进行处理。&JDBC 的socket timeout在数据库被突然停掉或是发生网络错误(由于设备故障等原因)时十分重要。由于TCP/IP的结构原因,socket没有办法探测到网络错 误,因此应用也无法主动发现数据库连接断开。如果没有设置socket timeout的话,应用在数据库返回结果前会无期限地等下去,这种连接被称为dead connection。&为了避免dead connections,socket必须要有超时配置。socket timeout可以通过JDBC设置,socket timeout能够避免应用在发生网络错误时产生无休止等待的情况,缩短服务失效的时间。&
不 推荐使用socket timeout来限制statement的执行时长,因此socket timeout的值必须要高于statement timeout,否则,socket timeout将会先生效,这样statement timeout就变得毫无意义,也无法生效。&
下面展示了socket timeout的两个设置项,不同的JDBC驱动其配置方式会有所不同。&
socket连接时的timeout:通过Socket.connect(SocketAddress endpoint, int timeout)设置
socket读写时的timeout:通过Socket.setSoTimeout(int timeout)设置
通过查看CUBRID,MySQL,MS SQL Server (JTDS)和Oracle的JDBC驱动源码,我们发现所有的驱动内部都是使用上面的2个API来设置socket timeout的。&
下面是不同驱动的socket timeout配置方式。&
JDBC Driver
connectTimeout配置项
socketTimeout配置项
MySQL Driver
connectTimeout(默认值:0,单位:ms)
socketTimeout(默认值:0,单位:ms)
jdbc:mysql://[host:port],[host:port]…/[database][?propertyName1][=propertyValue1][&propertyName2][=propertyValue2]…
jdbc:mysql://xxx.xx.xxx.xxx:3306/database?connectTimeout=60000&socketTimeout=60000
MS-SQL DriverjTDS Driver
loginTimeout(默认值:0,单位:s)
socketTimeout(默认值:0,单位:s)
jdbc:jtds:&server_type&://&server&[:&port&][/&database&][;&property&=&value&[;...]]
jdbc:jtds:sqlserver://server:port/loginTimeout=60;socketTimeout=60
Oracle Thin Driver
oracle.net.CONNECT_TIMEOUT (默认值:0,单位:ms)
oracle.jdbc.ReadTimeout(默认值:0,单位:ms)
不支持 通过url配置,只能通过OracleDatasource.setConnectionProperties() API设置,使用DBCP时可以调用BasicDatasource.setConnectionProperties()或 BasicDatasource.addConnectionProperties()进行设置
CUBRID Thin Driver
无独立配置项(默认值:5,000,单位:ms)
无独立配置项(默认值:5,000,单位:ms)
connectTimeout和socketTimeout的默认值为0时,timeout不生效。
除了调用DBCP的API以外,还可以通过properties属性进行配置。
通过properties属性进行配置时,需要传入key为“connectionProperties”的键值对,value的格式为“[propertyName=]*”。下面是iBatis中的properties配置。&
&transactionManager&type=“JDBC”&&&
&&&dataSource&type=“com.nhncorp.lucy.db.DbcpDSFactory”&&&
&&&&&….&&
&&&&&&property&name=“connectionProperties”&value=“oracle.net.CONNECT_TIMEOUT=6000;oracle.jdbc.ReadTimeout=6000″/&&&&
&&&/dataSource&&&
&/transactionManager&&&
操作系统的socket timeout配置&如 果不设置socket timeout或connect timeout,应用多数情况下是无法发现网络错误的。因此,当网络错误发生后,在连接重新连接成功或成功接收到数据之前,应用会无限制地等下去。但是, 通过本文开篇处的实际案例我们发现,30分钟后应用的连接问题奇迹般的解决了,这是因为操作系统同样能够对socket timeout进行配置。公司的Linux服务器将socket timeout设置为了30分钟,从而会在操作系统的层面对网络连接做校验,因此即使JDBC的socket timeout设置为0,由网络错误造成的数据库连接问题的持续时间也不会超过30分钟。&
通 常,应用会在调用Socket.read()时由于网络问题被阻塞住,而很少在调用Socket.write()时进入waiting状态,这取决于网络 构成和错误类型。当Socket.write()被调用时,数据被写入到操作系统内核的缓冲区,控制权立即回到应用手上。因此,一旦数据被写入内核缓冲 区,Socket.write()调用就必然会成功。但是,如果系统内核缓冲区由于某种网络错误而满了的话,Socket.write()也会进入 waiting状态。这种情况下,操作系统会尝试重新发包,当达到重试的时间限制时,将产生系统错误。在我们公司,重新发包的超时时间被设置为15分 钟。&
至此,我已经对JDBC的内部操作做了讲解,希望能够让大家学会如何正确的配置超时时间,从而减少错误的发生。&
最后,我将列出一些常见的问题。&
FAQ&Q1. 我已经使用Statement.setQueryTimeout()方法设置了查询超时,但在网络出错时并没有产生作用。&
? 查询超时仅在socket timeout生效的前提下才有效,它并不能用来解决外部的网络错误,要解决这种问题,必须设置JDBC的socket timeout。&
Q2. transaction timeout,statement timeout和socket timeout和DBCP的配置有什么关系?&
? 当通过DBCP获取数据库连接时,除了DBCP获取连接时的waitTimeout配置以外,其他配置对JDBC没有什么影响。&
Q3. 如果设置了JDBC的socket timeout,那DBCP连接池中处于IDLE状态的连接是否也会在达到超时时间后被关闭?&
? 不会。socket的设置只会在产生数据读写时生效,而不会对DBCP中的IDLE连接产生影响。当DBCP中发生新连接创建,老的IDLE连接被移除,或是连接有效性校验的时候,socket设置会对其产生一定的影响,但除非发生网络问题,否则影响很小。&
Q4. socket timeout应该设置为多少?&
? 就像我在正文中提的那样,socket timeout必须高于statement timeout,但并没有什么推荐值。在发生网络错误的时候,socket timeout将会生效,但是再小心的配置也无法避免网络错误的发生,只是在网络错误发生后缩短服务失效的时间(如果网络恢复正常的话)。
原文:/2466.html
深入理解Android写作背后的故事
本来是发表在《程序员》杂志的,结果编辑整理成一篇书评,内容和深度都大幅缩水,今天把原文post出来,希望能抛砖引玉。
我正式接触Android的准确时间应该在2010年9月份。那段时间,老听到公司有人说Donut,CupCake、Eclair等非常奇怪的词(直到现在,我也不中意Android的版本命名),心中不禁很仰慕:竟然还有这么多我闻所未闻的东西。所以
android 线程超时的例子
import java.util.T   import java.util.TimerT   import android.app.A   import android.app.AlertD   import android.app.D   import android.content.I   
android 线程判断超时 通俗易懂!
研究了 线程超时方面的东西 基本思路 触发事件之后 同时开启2个线程
1-timer线程
2-执行数据访问的thread线程
3-Runnable线程 此线程用来更新UI
timer线程设置CHECK_TIME秒之后执行,也就是访问的最大时间 超过此时
android线程超时的例子 多多指教!Skype:chu_jingwei
综合以前写的线程例子 演变成现在这个样子 具体的思路 跟上一个帖子没有什么变化,只是优化了点代码! 这里就不写注释了! /admin/blogs/1714483可能代码不是很周到,但是基本可以实现超时的问题,如果大家有更好的建议 不妨留下您的建议,咱们共同讨论一下! 感谢
深入浅出Android makefile(1)--初探
一、说明 android build system是一个非常庞大的系统,要编译Android工程、修改或新增Android模块都需要对这个编译系统有一定的了解。 但是由于它确实太庞大了,大家往往是不知道从哪里切入进去,进行一个深入的学习和了解。 下面我们尝试从一个小模块逐步对android build system做一个深入剖析。选择的这个
基于Android Fragment功能的例子
通过最近空闲时候对Fragment的学习,尝试着写了一个小Demo,将在开发的时候能常用到的Fragment知识放在一起,写过了这个Demo对Android Fragment的了解更加深入了,以后做起有关的项目也会顺手很多,下面先贴上几张实现之后的图片: 实现的功能很简单,也是最基本的,上下分别是两个Fragm
Android面试之---讲一下你对Activity的了解(面试必问的)
这篇文章会涉及到以下几个内容 一 Activity的生命周期 二 让Activity变成一个窗口:Activity属性设定 三 你后台的Activity被系统 回收怎么办:onSaveInstanceState 四 调用与被调用:我们的通信使者 - Intent
一 Activity的生命周期
理解android中Activity和Task的关系
Android的每个Activity都运行在堆栈中,一个Task栈可以有多个Activity,同一个Activity也可以在不同的Task栈中。
栈顶的Activity是用户当前正在进行交互的Activity。用户不断返回的时候,栈顶的Activity会不断弹出直到用户回到桌面或者其他启动这个Activity的组件,那么这个Task就会销毁
Android中设置全屏的方法
在实际的应用程序开发中,我们有时需要把 Activity 设置成全屏显示,一般情况下,可以通过两种方式来设置全屏显示效果。其一,通过在代码中可以设置,其二,通过manifest配置文件来设置全屏。
其一:在代码中设置(如下) [c-sharp] view plain
深入浅出 - Android系统移植与平台开发(九)- JNI介绍
JNI是在学习Android HAL时必须要面临一个知识点,如果你不了解它的机制,不了解它的使用方式,你会被本地代码绕的晕头转向,JNI作为一个中间语言的翻译官在运行Java代码的Android中有着重要的意义,这儿的内容比较多,也是最基本的,如果想彻底了解JNI的机制,请查看:
Android横竖屏的设置和使用
第一种,同时支持横屏和竖屏。 1)这种方式如果屏幕的布局在横屏和竖屏没有明显的差异,是不需要设置的,系统会默认旋转。 2)横屏和竖屏的布局明显的差异,比如横屏的时候可能会分成左右两屏,那么就需要我们进行相关的设置,这种情况下,一种布局文件是无法满足2种方向上的需要。
步骤如下:
首先需要在androidmanifest.xml中加入配置and
xml里面product的值在哪里设置的? &!--AproductwithnoSDcard==notremovable.--&
&boolname=&
Android 应用语言设置的实现
android每个应用都保存着一份仅对自身有用的配置,被封装在 android.content.res.Configuration 类里,通过该类,我们可以修改语言参数,实现对应用语言的变更。
首先获取 Configuration 对象:
Resources resource = getResources(); Configuration config
android 开发板如何识别有usb设备插入了 现在我们有个特殊需求,怎么识别usb的设备被插入了。设备或者u盘可以不正常工作,只需要在插入usb后能够有办法知道就好了
u盘插入我能找到办法---/proc/partitions---在这个目录下面如果有优盘插入会有新的信息写入,
但是鼠标键盘或者其他认识的不认识的设备怎么识别U口被插入了呢?
只想知道U口是不是被插入了。请各位帮帮
立波进程管家:全面查看了解安卓手机里的进程和服务(搜应用网推荐) 中文:立波进程管家
应用支持/官方网站:/souapp
email: [emailprotected]
应用官方下载链接:
/site_media/SOUAPP_ProgressManager.apk
深入浅出 - Android系统移植与平台开发(十) - led HAL案例分析
通过前两节HAL框架分析和JNI概述,我们对Android提供的Stub HAL有了比较详细的了解了,下面我们来看下led的实例,写驱动点亮led灯,就如同写程序,学语言打印HelloWorld一样,如果说打印HelloWorld是一门新语言使用的第一声吆喝,那么点亮led灯就是我们学习HAL的一座灯塔,指挥我们
Android编译是否生成odex的设置
默认编译odex版本,如果需要非odex版本,请将device/huawei/k3v2_s10/BoardConfig.mk如下两个变量的值修改为: DISABLE_DEXPREOPT := true WITH_DEXPREOPT := false 其它说明 A. device/hisi/k3v2oem1/下面的配置文件不再使用,对应的配置文件在devi
android 桌面(launcher) 上的图标如何设置大一些 android桌面(launcher)上的图标(或字体)如何设置大一些.
------解决方案-------------------- 使android桌面图标变大
http://blog.csdn.net/wzcqr0501/article/details/7301227
Android异步处理三:Handler+Looper+MessageQueue深入详解
在《Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面》中,我们讲到使用Thread+Handler的方式来实现界面的更新,其实是在非UI线程发送消息到UI线程,通知UI线程进行界面更新,这一篇我们将深入学习Android线程间通讯的实现原理。 概述:Android使用
Android异步处理三:Handler+Looper+MessageQueue深入详解
在《Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面》中,我们讲到使用Thread+Handler的方式来实现界面的更新,其实是在非UI线程发送消息到UI线程,通知UI线程进行界面更新,这一篇我们将深入学习Android线程间通讯的实现原理。 概述:Android使用
Android之旅一 了解Android基本信息
1、 我们学习java的时候需要用到jdk,在Android中我们需要用到的是sdk,下载网站: /sdk/index.html,sdk下载包目录:
2、 Android应用程序的结构
3、 代码详解 1)我们编写的java程序代码:
2)资源索引类:
其中:attr声明属性
Android的UI事件流机制
android中的事件类型分为按键事件和屏幕触摸事件,Touch事件是屏幕触摸事件的基础事件,有必要对它进行深入的了解。 一个最简单的屏幕触摸动作触发了一系列Touch事件:ACTION_DOWN-&ACTION_MOVE-&ACTION_MOVE-&ACTION_MOVE...-&ACTION_MOVE-&ACTION_
gallery 不能设置每个列表项的间隔是怎么回事,始终都会有间隔。。 gallery 不能设置每个列表项的间隔是怎么回事,始终都会有间隔。。我想把间隔设置为0.
android:spacing=&0dp& 这个不管用啊。。
------解决方案--------------------
来了噢!!!
怎么把TextView的背景设置成从黑色到透明渐变?
如图,这是Twitter的欢迎界面,这里的TextView的背景从黑色到透明渐变是怎么实现的?
------解决方案--------------------
可以TransitionDrawable用这个类来实现 final TransitionDrawable td =
new TransitionDrawable(new Draw
ScrollView中的组件设置android:layout_height=fill_parent不起作用的解决办法
ScrollView中的组件设置android:layout_height=fill_parent不起作用的解决办法摘自IT者安全网(www.itzhe.org)
原文:http://www.itzhe.org/system/others/28.html &
自定义的一个Dialog,标题上两个圆角怎么设置 自定义的布局,在shape.xml里的代码是
&?xmlversion=&1.0&encoding=&UTF-8&?&
&shapexmlns:android=&/
动态填充TableLayout,如何让表格充满屏幕?如何设置动态生成的Textview的字体大小? 用下面的代码动态填充TableLayout,最后显示表格的内容是居左显示的。如何让表格充满屏幕?如何设置动态生成的Textview的字体大小?
TableLayout tbl=(TableLayout) findViewById(R.id.TableLayout1); f
SharedPreferences 保存用户设置参数 不知道这样写,有什么问题,总之是没有保存设置的参数。参数设置后,退出来再进去,还是默认的设置。
importjava.util.ArrayL importjava.util.HashM importjava.util.L importjava.util.M impo
android 怎么设置TabHost默认显示的选项卡为选中状态 这个问题让我纠结很久了,没办法,只好请教高人了! 如图,当程序进入的时候显示如下界面
显示的为我标识的选项卡,但是他们并没有被选中,我想让他们默认为选中状态,如下图
实在没找到用什么方法,请教下各位,谢了!
------解决方案-------------------- tabhost.getCurrentTabView().
android目录权限深入分析
平台:FSL imx android 2.3.7
现象: # ls -l /mnt/sdcard
drwxrwxr-x system sdcard_rw
01:40 LOST.DIR
怎样设置Default Activity Run -& Run Configurations 的Launch Action 有一个 Launch Default Activity, 就是运行程序时首先启动的Activity吧, 怎样改变Default Activity呢?
------解决方案-------------------- mainfest中配置吧
------解决方案---
深入浅出Android makefile(2)--LOCAL_PATH
上文我们对acp的Android.mk文件做了一个大致的描述,使得大家对Android.mk文件有了一个初步的认识,下面我们就重点分析下第一行:
LOCAL_PATH:= $(call my-dir)
二、LOCAL_PATH
有人就问了,在本Android.mk中又没有使用到LOCA
Fragment的创建方式,怎么设置用Activity去控制呢?难道把Fragment当做Activity来用吗? 我自己创建了一个Fragment的小Demo,现在项目做重构用fragment替换已有的Activity.主归正传: 两个问题:1. 在&fragment&标签下定义了class或name属性后是不是就相当于new 了一个自定义的Fragment?因为下面代码中在Acti
深入浅出 - Android系统移植与平台开发(十一) - Sensor HAL框架分析之一
1. Sensor的概念 Sensor即传感器,在当前智能手机上大量存在:G-Sensor、LightsSensor、ProximitySensor、TemperatureSensor等,其作为Android系统的一个输入设备,对于重视用户体验
深入浅出 - Android系统移植与平台开发(十三) - Sensor HAL框架分析之三
让我们来看看SensorManager的代码 SensorManager框架层代码
@frameworks/base/core/java/android/hardware/SensorManager.java
public SensorManager(Looper mainLooper) { &n
深入浅出 - Android系统移植与平台开发(七)- 初识HAL
1. HAL的module与stub
HAL(Hardware AbstractLayer)硬件抽象层是Google开发的Android系统里上层应用对底层硬件操作屏蔽一个软件层次,说白了,就是上层的应用不用关心底层硬件具体如何工作的,只要向上层提供一个统一的接口
深入浅出 - Android系统移植与平台开发(十四) - Sensor HAL框架分析之四
Sensor本地封装类SensorDevice
SensorDevice是在本地代码中SensorService对Sensor设备的抽象类型封装,它封装了传感器硬件的硬件操作,该类继承了Singleton类,通过getInstance方法获得单例模式设备操作对象: @frameworks/base/
深入浅出 - Android系统移植与平台开发(六)- 为Android启动加速
Android的启动速度一直以来是他的诟病,虽然现在Android设备的硬件速度越来越快,但是随着新版本的出现,其启动速度一直都比较慢,当然,作为程序员,我们是可以理解的,智能手机本身就要启动很多服务来支持应用的功能,并且Android系统大部分还是使用的Java语言编写的,必然要运行在Java虚拟机里,这也决定了
Android学习——TextView 设置中划线 下划线
android:textAppearance
设置文字外观。如“?android:attr/textAppearanceLargeInverse
”这里引用的是系统自带的一个外观,?表示系统是否有这种外观,否则使用默认的外观。可设置的值如下:textAppearanceButton/textAppearance
Android 4.2(JB2)加入多账户后input&language以及Calendar的变化总结
JB2中最明显的变化是加入了支持多账户,为了搞清楚多账户的功能对每个apk的影响,我主要测试了IME和Calendar两个功能,现将两者的测试结果记录如下: IME方面: 1.进入settings的input&language选项设置语言,如果当前有多个用户的话,此时会弹出对话

我要回帖

更多关于 mysql设置waittimeout 的文章

 

随机推荐