现在的位置: 首页 > 综合 > 正文

Android 移动开发TIPS小结4

2013年01月31日 ⁄ 综合 ⁄ 共 3415字 ⁄ 字号 评论关闭
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 表示要测试的次数

抱歉!评论已关闭.