Android 移动开发TIPS小结4
1 一个不错的handler例子
public static final int UPDATE_DATA = 0;//常量,代表更新数据
public static final int UPDATE_COMPLETED = 1;//常量,代表更新数据
TextView tv;//TextView对象的引用
Button btnStart;//Button对象的引用
//主线程的Handler对象
Handler myHandler = new Handler(){
@Override
public void handleMessage(Message msg) {//重写处理消息方法
switch(msg.what){//判断消息类别
case UPDATE_DATA://消息为更新的数据
tv.setText("正在更新来自线程的数据:"+msg.arg1+"%...");
break;
case UPDATE_COMPLETED://消息为更新完毕
tv.setText("已完成来自线程的更新数据!");
break;
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);//设置当前屏幕为R.layout.main布局文件
tv = (TextView)findViewById(R.id.tv);//获得屏幕中TextView对象引用
btnStart = (Button)findViewById(R.id.btnStart);//获得屏幕中Button对象引用
btnStart.setOnClickListener(new View.OnClickListener() {//为Button添加点击事件监听器
public void onClick(View v) {
new Thread(){//启动一个新线程
public void run(){
for(int i=0;i<100;i++){
try{//睡眠一段时间
Thread.sleep(150);
}
catch(Exception e){
e.printStackTrace();
}
Message m = myHandler.obtainMessage();//创建
Message对象
m.what = UPDATE_DATA;//为what字段赋值
m.arg1=i+1;//为arg1字段赋值
myHandler.sendMessage(m);//发出Message对象
}
myHandler.sendEmptyMessage(UPDATE_COMPLETED);//发出更新 JQuery 动态删除添加html元素band事件
完毕消息
}
}.start();
}
});
}
2 如果你对于Android的Thread+Handler方式感觉繁琐,不妨试试Activity提供的另外一种简单的方法runOnUiThread
,runOnUiThread可以帮助你在线程中执行UI更新操作,我们只需要在线程中写上类似
android123.this. runOnUiThread(new Runnable() {
@Override
public void run() {
// refresh ui 的操作代码
}
});
这里需要注意的是runOnUiThread是Activity中的方法,在线程中我们需要告诉系统是哪个activity调用,所以前面
显示的指明了activity。
runOnUiThread() 方法 类似于JAVA ui的 保护线程
3 一种启动时显示启动首屏,然后过2秒跳转到其他intent的用法:
new Handler().postDelayed(new Runnable(){
public void run() {
Intent mainIntent = new Intent(CoverActivity.this,PlayerActivity.class);
CoverActivity.this.startActivity(mainIntent);
CoverActivity.this.finish();
}
}, 2000);
4 多语言设置
英文系 /res/drawable/icong.png
/res/values/strings.xml
日本语系
/res/drawable-ja/icong.png
/res/values-ja/strings.xml
繁体 zh-rTW:
5 在一个典型的应用中,比如修改用户名密码后,把修改的信息发送到服务端的SERVLET中,可以采用如下模式:
StringBuilder requestString = new StringBuilder();
requestString.append("loginid=").append(userData[1])
.append("&oldpwd=").append(oldPassword.getText().toString
().trim())
.append("&newpwd=").append(newPassword.getText().toString
().trim());
final String url = OrderHttpUtil.BASE_URL +
OrderUrlUtil.MODIFY_PASSWORD_INFOR + requestString;
proDlg = OrderStringUtil.createProgressDialog(InforModifyActivity.this,
"提交请求", "正在提交请求数据,请稍后...",
false, true);
proDlg.show();
new Thread(){
@Override
public void run() {
/**
* res 结果判断
* -1 修改错误
* 0 修改成功
* 1 原密码错误
*/
String res = OrderHttpUtil.getHttpPostResultForUrl
(url);
Message m = new Message();
if("-1".equals(res))
m.what = OrderStringUtil.PASSWORD_ERROR;
else if("0".equals(res))
m.what = OrderStringUtil.PASSWORD_MODIFY_OK;
else
m.what = OrderStringUtil.PASSWORD_OLD_REEOR;
handler.sendMessage(m);
}
}.start();
handle处理:
private Handler handler = new Handler(){
public void dispatchMessage(Message msg) {
AlertDialog.Builder builder = new AlertDialog.Builder
(InforModifyActivity.this);
proDlg.dismiss();
switch(msg.what){
case OrderStringUtil.BASE_MODIFY_OK
{
...............................
}
}
6 adb相关操作
adb devices 列出状态
adb get-state
adb get-serialno 获得模拟器序号
安装apk
adb -s emualator-5556 install xxxx.apk
但注意,移除的时候要
adb uninstall com.liao.xxxxx(移除的时候要输入包的名称)
7 adb测试压力测试
adb -d shell monkey -p your.package.name -v 100
-p 表示指向的包名,-v 表示要测试的次数
public static final int UPDATE_DATA = 0;//常量,代表更新数据
public static final int UPDATE_COMPLETED = 1;//常量,代表更新数据
TextView tv;//TextView对象的引用
Button btnStart;//Button对象的引用
//主线程的Handler对象
Handler myHandler = new Handler(){
@Override
public void handleMessage(Message msg) {//重写处理消息方法
switch(msg.what){//判断消息类别
case UPDATE_DATA://消息为更新的数据
tv.setText("正在更新来自线程的数据:"+msg.arg1+"%...");
break;
case UPDATE_COMPLETED://消息为更新完毕
tv.setText("已完成来自线程的更新数据!");
break;
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);//设置当前屏幕为R.layout.main布局文件
tv = (TextView)findViewById(R.id.tv);//获得屏幕中TextView对象引用
btnStart = (Button)findViewById(R.id.btnStart);//获得屏幕中Button对象引用
btnStart.setOnClickListener(new View.OnClickListener() {//为Button添加点击事件监听器
public void onClick(View v) {
new Thread(){//启动一个新线程
public void run(){
for(int i=0;i<100;i++){
try{//睡眠一段时间
Thread.sleep(150);
}
catch(Exception e){
e.printStackTrace();
}
Message m = myHandler.obtainMessage();//创建
Message对象
m.what = UPDATE_DATA;//为what字段赋值
m.arg1=i+1;//为arg1字段赋值
myHandler.sendMessage(m);//发出Message对象
}
myHandler.sendEmptyMessage(UPDATE_COMPLETED);//发出更新 JQuery 动态删除添加html元素band事件
完毕消息
}
}.start();
}
});
}
2 如果你对于Android的Thread+Handler方式感觉繁琐,不妨试试Activity提供的另外一种简单的方法runOnUiThread
,runOnUiThread可以帮助你在线程中执行UI更新操作,我们只需要在线程中写上类似
android123.this. runOnUiThread(new Runnable() {
@Override
public void run() {
// refresh ui 的操作代码
}
});
这里需要注意的是runOnUiThread是Activity中的方法,在线程中我们需要告诉系统是哪个activity调用,所以前面
显示的指明了activity。
runOnUiThread() 方法 类似于JAVA ui的 保护线程
3 一种启动时显示启动首屏,然后过2秒跳转到其他intent的用法:
new Handler().postDelayed(new Runnable(){
public void run() {
Intent mainIntent = new Intent(CoverActivity.this,PlayerActivity.class);
CoverActivity.this.startActivity(mainIntent);
CoverActivity.this.finish();
}
}, 2000);
4 多语言设置
英文系 /res/drawable/icong.png
/res/values/strings.xml
日本语系
/res/drawable-ja/icong.png
/res/values-ja/strings.xml
繁体 zh-rTW:
5 在一个典型的应用中,比如修改用户名密码后,把修改的信息发送到服务端的SERVLET中,可以采用如下模式:
StringBuilder requestString = new StringBuilder();
requestString.append("loginid=").append(userData[1])
.append("&oldpwd=").append(oldPassword.getText().toString
().trim())
.append("&newpwd=").append(newPassword.getText().toString
().trim());
final String url = OrderHttpUtil.BASE_URL +
OrderUrlUtil.MODIFY_PASSWORD_INFOR + requestString;
proDlg = OrderStringUtil.createProgressDialog(InforModifyActivity.this,
"提交请求", "正在提交请求数据,请稍后...",
false, true);
proDlg.show();
new Thread(){
@Override
public void run() {
/**
* res 结果判断
* -1 修改错误
* 0 修改成功
* 1 原密码错误
*/
String res = OrderHttpUtil.getHttpPostResultForUrl
(url);
Message m = new Message();
if("-1".equals(res))
m.what = OrderStringUtil.PASSWORD_ERROR;
else if("0".equals(res))
m.what = OrderStringUtil.PASSWORD_MODIFY_OK;
else
m.what = OrderStringUtil.PASSWORD_OLD_REEOR;
handler.sendMessage(m);
}
}.start();
handle处理:
private Handler handler = new Handler(){
public void dispatchMessage(Message msg) {
AlertDialog.Builder builder = new AlertDialog.Builder
(InforModifyActivity.this);
proDlg.dismiss();
switch(msg.what){
case OrderStringUtil.BASE_MODIFY_OK
{
...............................
}
}
6 adb相关操作
adb devices 列出状态
adb get-state
adb get-serialno 获得模拟器序号
安装apk
adb -s emualator-5556 install xxxx.apk
但注意,移除的时候要
adb uninstall com.liao.xxxxx(移除的时候要输入包的名称)
7 adb测试压力测试
adb -d shell monkey -p your.package.name -v 100
-p 表示指向的包名,-v 表示要测试的次数