组内开站会,较大组开周会;bug修改的追踪;二选一或者三选一模式;
Framework虽然是android的内核,但其内部也包含一个应用程序,system_process,对应TCP端口号为8600,
引入了特别的类,不采用run/debug;使用$make Contacts的命令编译出apk。
在Logger驱动程序模块中,定义了log_main、log_events和log_radio三个日志缓冲区,分别对应三个设备文件/dev/log/main、/dev/log/events和/dev/log/radio。
log总结:首先是从应用程序层调用framework的Java接口,framework的Java接口通过调用本层的JNI方法进入到系统运行库层的C接口,系统运行库层的C接口通过设备文件来访问内核空间层的Logger驱动程序。这是一个典型的调用过程,很好地诠释Android的系统架构。
函数调用log_writev来实现Log的写入,注意,这里通过一个循环来写入Log,直到写入成功为止。
Android系统中,提供了一个轻量级的日志系统,这个日志系统是以驱动程序的形式实现在内核空间的,而在用户空间分别提供了Java接口和C/C++接口来使用这个日志系统,取决于你编写的是Android应用程序还是系统组件。
trim() 功能:去掉字符串首尾空格,防止不必要的空格导致错误。
重启QQ出现(由于文件读取出错,暂时无法完成登录,请稍后再试。)-- $ ps -e|grep QQ $ sudo kill pid
logcat不显示log:eclipse->windows->show view->Devices->点一下debug
Samba(SMB是其缩写) 是一个网络服务器,用于Linux和Windows共享文件之用;Samba 即可以用于Windows和Linux之间的共享文件,也一样用于Linux和Linux之间的共享文件;不过对于Linux和Linux之间共享文件有更好的网络文件系统NFS,NFS也是需要架设服务器的;
cache与buffer,cache是加速读,buufer是加速写。
Service-->ContextWrapper-->Context
Activity-->ContextThemeWrapper-->ContextWrapper-->Context
720p屏幕的手机会优先使用xhdpi,大部分老机子都是480p的,这些机子不支持xhdpi,默认是hdpi优先
GPL,是General Public License的缩写,是一份GNU通用公共授权。它并非由自由软件基金会所发表。
由于JDK7、OpenJDK和IcedTea都是并行发展的。
Sun Microsystems于8月9日宣布为JCK(Java Compatibility Kit――Java兼容性工具包)发布一个新的许可证版本。这个特别拟定的 OpenJDK社区TCK许可证(OpenJDK Community TCK License)――正如其名字所暗示的――被设计成方便OpenJDK社区更宽松地访问JCK,因而确保了与Java标准保持一致。按照Apache的说法,这一协定应该约束参与者只能在非限制许可下分发技术兼容工具包(technology compatibility kits――TCK)。
BusyBox是一个集成了一百多个最常用linux命令和工具的软件。
一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高传输率(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。
刷机:同时按住下音量下键 + HOME键 + 电源键,等待3秒;再按音量上键,进入界面为绿色机器人,此为刷机模式
Odin:一款用于手机刷机的软件。在手机关机的状态下通过组合键(不同机型组合键不同)使手机进入刷机模式,然后用odin软件选择对应机型的ops文件,再选择固件包(one package或者单包)即可开始刷机.
ODEX是安卓上的应用程序apk中提取出来的可运行文件,即将APK中的classes.dex文件通过dex优化过程将其优化生成一个.dex文件单独存放,原APK中的classes.dex文件会保留。Odex化即是把那个文件预先提取出来作用是能加快软件加载速度和开机速度。不过Odex也有缺点,那就是有时候加刷东西会出现问题。
涛:我觉得android的基本构架和源码还是有必要了解和学习的,对做app也有帮助。以前是做本地图库的,现在做云相册。
设置view的样式: style="@style/TextAppearance.EditEvent_Spinner"
Eclipse设置软tab(用4个空格字符代替):Window->PreferencesGeneral->Editors->Text Editors->在右侧找到Displayed tab width:把下面的“Insert spaces for tabs” 勾选上,点OK保存之后,新建一个html文件输入几个tab键并按左右方向键移动光标测试一下。
针对java文件配置softtab,打开左侧菜单:Java->Code Style->Formatter,然后点击Active profile中的Edit按钮,在弹出的窗口中,选择General settings中的Tab policy为Spaces only,然后右边选择 Edit...按钮,在General Settings页中 Tab policy 右边的下拉框,选择Space only!然后下面的Indentation size 和 Tab size 都设置成你要的空格数即可!一般是4个空格!!修改Profile name然后保存即可。
Unix下UTF-8格式的文件头中是不包含BOM标识的,而Window模式下的UTF-8文件头中是包含了BOM标识的。
aapt(Android Asset Package Tool)Android资源打包工具。
bugreport里面包含了各类log信息,大多数log也可以经由过程直接运行相干的法度来直接获得。例如:内存应用/proc/meminfo;CPU应用/system/bin/top -n 1 -d 1 -m 30 -t ; 虚拟内存分配/proc/vmstat;
dmesg(命令adb shell dmesg > ldmesg_kernel.log)是kernel的log,凡是跟kernel相关的,比如driver出了问题(相机,蓝牙,usb,启动,等等)
dumpstate是系统状态信息,里面比较全,包括手机当前的内存信息、cpu信息、logcat缓存,kernel缓存等等;
dumpsys这个是关于系统所有进程Process的内容都在这个里面,adb shell dumpsys 这个命令还有更详尽的用法,比如adb shell dumpsys meminfo system是查看system这个process的内存信息。
ListView,如果有mHeaderViewInfos或者mFooterViewInfos,则mAdapter=new HeaderViewListAdapter(mHeaderViewInfos,mFooterViewInfos,adapter);
软链接(symbolic link)符号链接称为软链接,它是指向另一个文件的特殊文件,这种文件的数据部分仅包含它所要链接文件的路径名。软链接是为了克服硬链接的不足而引入的,软链接不直接使用inode号作为文件指针,而是使用文件路径名作为指针(软链接:文件名 + 数据部分-->目标文件的路径名)。
硬链接(hard link):该登记项具有一个新的文件名和要连接文件的 inode号,文件的目录登记项就是所谓的文件硬链接(硬链接,目录登记项: 文件名-->文件的inode;文件名可以有多个,但文件inode只是一个)。硬链接不能跨越文件系统,也不能对目录建立硬链接!
PackageInfo,从manifest开始的所有信息;ApplicationInfo,从applicaiton标签开始。 ActivityInfo,从activity标签开始。
Shell就是一个命令行解释器,它的作用就是遵循一定的语法将输入的命令加以解释并传给系统。
NOR和NAND是非易失闪存技术;NOR适合存储少量代码,读取速度快,写入/擦除速度慢;NAND高存储密度,写入/擦除速度也很快。mtd设备象闪存芯片/小型闪存卡之类的设备,用在嵌入式设备中。
MTD(Memory Technology Devices)是把手机内置分区给重新分配,HERO的系统结构是这样的:/system占170MB,/cache占130MB,而留给用户使用的/data却只有160MB。MTD就是把/SYS及/chche的没利用空间分配到用户的/data中。
Yaffs(Yet Another Flash File System)文件系统是专门针对NAND闪存设计的嵌入式文件系统。Yaffs2能更好的支持大容量NAND FLASH芯片。
shell执行多个命令:用分号隔开; 用&&隔开,成功则执行下一条命令; 用||隔开,前一个成功则不执行下一条命令。
bash sehll的命令分为两类,内部命令和外部命令。外部命令是通过系统调用独立的程序实现的,如sed/awk等;内部命令是由特殊的文件格式.def所实现,如cd/history/exec等。
fork是linux系统调用的,用来创建子进程。环境变量(遗传性是本地变量和环境变量的根本区别)只能单向从父进程传递给子进程。
两种方法执行shell脚本,新vs当前。新的在scripts文件开头加入#!/bin/sh。 一般的script文件(.sh)是新shell;source(.)是在当前shell执行。exec命令不产生新的子进程,它会把当前shell进程关闭,然后换到后面的的命令继续执行。
svn与git:git是分布式的,svn不是;git内容按元数据方式存储,svn按文件;git与svn分支不同(git能快速切换);git没有全局的版本号;git的内容存储使用的是SHA-1哈希算法。
git的push两种方式:SSH方式和HTTPS方式。
handler出现原因:android的UI操作用户交互(线程安全与同步);android耗时操作放在子线程中;UI线程与子线程交互。
android中定时器使用:handler与线程的sleep方法;handler的postDelayed方法(需在run方法中handler.postDelayed(this, 2000));handler与timer/TimerTask结合的方法。
android中常用定时器有系统的AlarmService和Java.util.Timer。待机中仍然计数需AlarmManager的setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,,,);
AutoCompleteTextView是实现动态匹配输入的内容。如google搜索引擎当输入文本时可以根据内容显示匹配的热门信息。
udev是Linux下的设备管理器,它支持即插即用,即自动识别新加入到系统中的外部设备,特别是USB设备。主要管理/dev目录底下的设备节点。udev的一个特点是,它允许指定一系列响应规则,在它侦测到新设备加入的时侯,执行它们。udev要求将这些规则存储在/etc/udev/rules.d/目录下的文件中,该文件名必须以.rules结束。一些系统之中,udev默认的规则存储在/etc/udev/rules.d/50-udev.rules文件中。udev按照字母排序依次解释这些文件中的规则,因此,如果你希望自己添加的规则在默认规则之后处理,那么文件名开头必须大于50,比如51。这就是51-android.rules命名的缘由,它希望自己在默认的udev规则之后处理。另外,简要说一下USB的知识:一个USB设备由两个ID来标识,Vender ID和Product ID,Vender ID由设备制造商向USB执行论坛申请,Product ID则由设备制造商自行分配。
手机的调试模式:*#*#4636#*#*
adb insufficient permissions解决方案:切换成root用户,然后#adb kill-server & #adb start-server解决;$sudo chmod a+s adb
安装busybox:先push到sdcard;#mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system ; #chmod 755 busybox #busybox --install . #alias ls='busybox ls'
瑞士军刀是含有许多工具在一个刀身上的折叠小刀,由于瑞士军方为士兵配备这类工具刀而得名。在瑞士军刀中的基本工具常为,圆珠笔、牙签、剪刀、平口刀、开罐器、螺丝起子、镊子等。要使用这些工具时,只要将它从刀身的折叠处拉出来,就可以使用。
linux下test命令是评估一个表达式;如果条件为真,则返回一个0值。如果表达式不为真,则返回一个大于0的值-也可以将其称为假值。
内容提供者URI以"content://"开头。All URIs for providers begin with the string "content://". This identifies the data as being controlled by a content provider.
查询数据库:尽量避免使用外界传入的字符硬拼,避免注入攻击的同时避免查询特殊字符出错。 --- 考虑使用ContentValue;query时,条件用占位符。
HierarchyView的TreeView的使用。
fragmentActivity,V4中的,新sdk在Activity中:继承来的getFragmentManager();自己特有的getSupportFragmentManager();使用起来一样,FrameLayout;
Fragment与Activity通讯:Activity中 getFragmentManager().findFragmentById(R.id.example_fragment); Fragment中,面向接口编程,重写接口的activity去处理,降低耦合度;
DayFragment中有ViewSwitcher,ViewSwitcher上是DayView;DayView只能利用消息中心把消息传递给DayFragment;也可以面向接口编程,让实现者去处理;
如何停止服务:mService.stopSelf(); Service是UI线程,能够直接new Handler();
面向接口编程:通讯录界面处理。
EventInfoFragment中Utils.getTimeZone(mContext, mTZUpdater)的使用;获取TimeZone,第一时异步查询并添加到配置文件中和回调,不是第一次,查询结果与配置文件不一样时才回调;
具有处理消息功能的子线程:HandlerThread,内部封装了Looper;mHandler=new ExtendHandler(mHandlerThread.getLooper() );
IntentService重写onHandleIntent(mIntent);
GeneralPreferences extends PreferenceActivity implements OnSharedPreferenceChangeListener, OnPreferenceChangeListener{ *** }