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);//发出更新

完毕消息
}
}.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 表示要测试的次数

你可能感兴趣的:(thread,多线程,android,UI,应用服务器)