【Android中的adb工具的使用】
adb(Android Debug Bridge)是Android提供的一个通用的调试工具,借助这个工具,我们可以管理设备或手机模拟器的状态。还可以进行以下的操作:
1、快速更新设备或手机模拟器中的代码,如应用或Android系统升级;
2、在设备上运行shell命令;
3、管理设备或手机模拟器上的预定端口;
4、在设备或手机模拟器上复制或粘贴文件;
【平台分化可能导致Android平台退出历史舞台】
Android平台开源,导致每个手机的配置并不一样,Android开发工程师们要买很多手机去测试自己的Android应用能否正常运行,是否存在bug。一个手机的测试就已经是很痛苦的事情了。这个手机测试数量可能是30,在将来可能是90,180也未可知。并且Android越是流行,采用Android的手机制造商越多,不是每个手机硬件都完美的。越多的次品将会给Android带来严重的负面效应。
【强大HTML5的移动Web应用或将一统天下】
可以用Rexsee(http://www.rexsee.com)等优秀的移动中间件产品将Web应用转换成Apk程序,作为原生的Android应用进行发布。
移动终端之所以风靡全球,除了强大的硬件特性之外,更关键的因素在于其庞大的移动应用软件。在目前看来,在AppStore和Android Market上的应用都是基于两大公司提供给第三方应用开发人员的SDK进行开发的。
【Flurry介绍及使用】
- 完全免费
- 提供准确的实时数据,服务稳定
- 支持iphone、Java、Android、Blackberry平台,并将陆续推出Symbian和WM
- 后台统计分析界面直观,可查看全球用户分布图等多项服务
- 支持开发者定义事件(event),更好的追踪用户等
添加 FlurryAgent.jar 到你的classpath
配置AndroidManifest.xml文件,添加权限
android.permission.INTERNET
android.permission.ACCESS_COARSE_LOCATION
android.permission.ACCESS_FINE_LOCATION
在程序中使用 Flurry
import com.flurry.android.FlurryAgent;
Map<String, String> map = new HashMap<String, String>();
map.put("logout_desc", "username [" + user.name + "] logout");
FlurryAgent.onEvent("user Logout", map);
public void onStart() {
super.onStart();
FlurryAgent.onStartSession(this, FLURRY_API_KEY);
}
public void onStop() {
super.onStop();
FlurryAgent.onEndSession(this);
}
【android.preference.PreferenceActivity】保存设置
界面XML文件:preference_setting.xml
<?xml version="1.0" encoding="UTF-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="我的位置源">
<CheckBoxPreference
android:key="my_wireless_network"
android:title="使用无线电"
android:summary="使用无线网络查看应用程序(例如Google地图)中的位置"
/>
<CheckBoxPreference
android:key="my_gps_satellite_setting"
android:title="启用GPS卫星设置"
android:summary="定位时,精确到街道级别(取消选择可节约电量)"
/>
</PreferenceCategory>
<PreferenceCategory android:title="个人信息设置">
<CheckBoxPreference
android:key="my_yesno_save_individual_info"
android:title="是否保存个人信息"
/>
<EditTextPreference
android:key="my_individual_name"
android:title="姓名"
android:summary="请输入真实姓名"
/>
<PreferenceScreen
android:key="my_other_individual_msg"
android:title="其他个人信息"
android:summary="是否工作、手机">
<CheckBoxPreference
android:key="my_is_an_employee"
android:title="是否工作"
/>
<EditTextPreference
android:key="my_mobile"
android:title="手机"
android:summary="请输入您的手机号码"
/>
</PreferenceScreen>
</PreferenceCategory>
</PreferenceScreen>
PreferenceActivity 的类文件:
package com.icitylife.preference;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceScreen;
import android.preference.Preference.OnPreferenceChangeListener;
public class Main extends PreferenceActivity implements OnPreferenceChangeListener {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//设置PreferenceActivity保存数据使用的XML文件的名称
getPreferenceManager().setSharedPreferencesName("mySetting");
//加载XML资源文件:此处就不能使用Activity的setContentView()
addPreferencesFromResource(R.xml.preference_setting);
//获取【姓名】设置项对应的Preference对象
Preference individualNamePreference=findPreference("my_individual_name");
//获得指向mySetting.xml文件的SharedPreference对象
SharedPreferences sharedPreferences=individualNamePreference.getSharedPreferences();
//设置【姓名】设置项的summary
individualNamePreference.setSummary(sharedPreferences.getString("my_individual_name",""));
//判断【是否保存个人信息】设置项是否被选中
if(sharedPreferences.getBoolean("my_yesno_save_individual_info",false)){
individualNamePreference.setEnabled(true);
}else{
individualNamePreference.setEnabled(false);
}
individualNamePreference.setOnPreferenceChangeListener(this);
//获得【电话号码】设置项对应的Preference对象
Preference mobileNamePreference=findPreference("my_mobile");
SharedPreferences mobileSharedPreferences=mobileNamePreference.getSharedPreferences();
//设置【电话号码】的summary
mobileNamePreference.setSummary(mobileSharedPreferences.getString("my_mobile",""));
mobileNamePreference.setOnPreferenceChangeListener(this);
}
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
preference.setSummary(String.valueOf(newValue));
return true;
}
/**
* 处理【是否保存个人信息】的改变事件
*/
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
Preference preference){
if("my_yesno_save_individual_info".equals(preference.getKey())){
findPreference("my_individual_name").setEnabled(!findPreference("my_individual_name").isEnabled());
}
return super.onPreferenceTreeClick(preferenceScreen, preference);
}
}
【android的selector背景选择器 】
Android selector选择器可以让你切换自定义的背景风格,比如button、ListView、或者布局点击时候的背景切换等,都需要用到它背景可以是自定义到颜色,或者图片资源
把下面的XML文件保存成你自己命名的.xml文件(比如list_item_bg.xml),在系统使用时根据ListView中的列表项的状态来使用相应的背景图片。
drawable/list_item_bg.xml
<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 默认时的背景图片-->
<item android:drawable="@drawable/pic1" />
<!-- 没有焦点时的背景图片-->
<item android:state_window_focused="false" android:drawable="@drawable/pic1" />
<!-- 非触摸模式下获得焦点并单击时的背景图片-->
<item android:state_focused="true" android:state_pressed="true"
android:drawable="@drawable/pic2" />
<!-- 触摸模式下单击时的背景图片-->
<item android:state_focused="false" android:state_pressed="true"
android:drawable="@drawable/pic3" />
<!--选中时的图片背景-->
<item android:state_selected="true" android:drawable="@drawable/pic4" />
<!--获得焦点时的图片背景-->
<item android:state_focused="true" android:drawable="@drawable/pic5" />
</selector>
使用些xml文件:第一种是在listview中配置android:listSelector="@drawable/list_item_bg"
或者在listview的item中添加属性android:background=“@drawable/list_item_bg"即可实现,或者在java代码中使用:Drawable drawable = getResources().getDrawable(R.drawable.list_item_bg); ListView.setSelector(drawable);同样的效果
【AchartEngine 】
AChartEngine(简称ACE)是Google的一个开源图表库(for Android)。它功能强大,支持散点图、折线图、饼图、气泡图、柱状图、短棒图、仪表图等多种图表。
【jQuery Mobile 】
jQuery Mobile 是jQuery 在手机上和平板设备上的版本。jQuery Mobile 不仅会给主流移动平台带来jQuery核心库,而且会发布一个完整统一的jQuery移动UI框架。支持全球主流的移动平台。jQuery Mobile开发团队说:能开发这个项目,我们非常兴奋。移动Web太需要一个跨浏览器的框架,让开发人员开发出真正的移动Web网站。
【ViewSwitcher 】
使用ViewSwitcher实现ListView的数据动态加载
【Layout_width="match_parent" 】
"match_parent"(在API level 8之前被称之为"fill_parent"),控件的高度和宽度将和父控件的大小一样。
【 DefaultHandler】
sax解析xml文件的DefaultHandler处理类
【AsyncTask对比Thread加Handler】
从Android 1.5开始系统 将AsyncTask引入到android .os包中
使用AsyncTask代替Thread+Handler的方式,不仅调用上更为简单,经过实测更可靠一些,Google在Browser中大量使用了异步任务 作为处理耗时的I/O操作,比如下载文件 、读写数据 库等等,它们在本质上都离不开消息,但是AsyncTask相比Thread加Handler更为可靠,更易于维护,但AsyncTask缺点也是有的比如一旦线程开启即dobackground方法执行后无法给线程发送消息,仅能通过预先设置 好的标记来控制逻辑,当然可以通过线程的挂起等待标志位的改变来通讯,对于某些应用Thread和Handler以及Looper可能更灵活。
【Android读写XML 】
Android读写XML主要有2种方法:DOM与SAX(Simple API for XML)
DOM(文档对象模型),为XML文档的解析定义了一组接口,解析器读入整个文档,然后构造一个驻留内存的树结构,然后代码就可以使用DOM接口来操组整个树结构,其他点如下:
- 优点:整个文档树都在内存当中,便于操作;支持删除、修改、重新排列等多功能。
- 缺点:将整个文档调入内存(经常包含大量无用的节点),浪费时间和空间。
- 使用场合:一旦解析了文档还需要多次访问这些数据,而且资源比较充足(如内存、CPU等)。
为了解决DOM解析XML引起的这些问题,出现了SAX。SAX解析XML文档为事件驱动,详细说明请阅读Android读写XML(中)–SAX。当解析器发现元素开始、元素结束,文本、文档的开始或者结束时,发送事件,在程序中编写响应这些事件的代码,其特点如下:
- 优点:不用事先调入整个文档,占用资源少。尤其在嵌入式环境中,极力推荐采用SAX进行解析XML文档。
- 缺点:不像DOM一样将文档长期驻留在内存,数据不是持久的,事件过后,如没有保存数据,那么数据就会丢失。
- 使用场合:机器性能有限,尤其是在嵌入式环境,如Android,极力推荐采用SAX进行解析XML文档。
【Android拆分函数split】
如果使用"."、"|"、"^"等字符做分隔符时,要写成s3.split("//|")的格式,否则不能拆分
【Android DatePicker】
getMonth ()
获取选择的月份。(注意:返回数值为0..11,需要自己+1来显示)
【Android源码下载】
贡献15本pdf完整版经典Android教程和海量Android源码