Android中的线程

在UI线程中不允许存在阻断的当有需要耗时操作的时候需要另起一个新的线程。例如简单的一个例子:

在页面出现一个圆圈进度条,他是执行一个耗时操作的任务,在这里对其进行睡眠达到这个效果。则需要一个新的子线程来执行这个操作:

 PopupWindow pop;
    ProgressDialog pd;

   //进度框的显示
    public void pdshow(){
        pd = new ProgressDialog(this);
        pd.setTitle("消息框");
        pd.setMessage("请稍后。。。");
        pd.setCancelable(true);
        pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        pd.show();
    }

    Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            //super.handleMessage(msg);
            //关闭进度条
             pd.dismiss();
        }
    };

    public void btonclick(View v){

        //调用显示进度条的方法
        pdshow();
       //新建立一个子线程让其在三秒之后把刚才打开的进度条关闭
         new Thread(){
            @Override
            public void run() {
                super.run();
                for(int i=0; i<3; i++){
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                handler.sendEmptyMessage(0);
            }
        }.start();

        /*LayoutInflater inflater = LayoutInflater.from(this);
        View myview = inflater.inflate(R.layout.layout_my_dialog, null);
        //AlertDialog.Builder builder = new AlertDialog.Builder(this);
        //builder.setView(myview);
        pop = new PopupWindow(myview, 600, 500);

        myview.findViewById(R.id.bt_02).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               // Toast.makeText(MainActivity2.this, "点击了确定", Toast.LENGTH_SHORT).show();
                pop.dismiss();
            }
        });
        //pop.showAsDropDown(v);
        pop.showAtLocation(v, Gravity.CENTER, 0, 0);*/
        //dialog = builder.create();
        //dialog.show();
        //builder.show();

    }
如果把圆圈的进度条转化为长的进度条时:

 PopupWindow pop;
    ProgressDialog pd;

    public void pdshow(){
        pd = new ProgressDialog(this);
        pd.setTitle("消息框");
        pd.setMessage("请稍后。。。");
        pd.setCancelable(true);
        pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        pd.setMax(10);  //最终需要完成的量
        pd.show();
    }

    Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            //super.handleMessage(msg); 需要根据不同的message判断应该怎么处理
            if(msg.what == 0){
                pd.dismiss();
            } else {
                pd.setProgress(msg.arg1);
            }

        }
    };

    public void btonclick(View v){

        pdshow();
        new Thread(){
            @Override
            public void run() {
                super.run();
                for(int i=1; i<11; i++){
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    //不在进行发送空消息 而是发送包含message的消息以进行判断
                    Message msg = Message.obtain();
                    msg.arg1 = i;
                    msg.what = 1;
                    handler.sendMessage(msg);
                }
                handler.sendEmptyMessage(0);
            }
        }.start();

        /*LayoutInflater inflater = LayoutInflater.from(this);
        View myview = inflater.inflate(R.layout.layout_my_dialog, null);
        //AlertDialog.Builder builder = new AlertDialog.Builder(this);
        //builder.setView(myview);
        pop = new PopupWindow(myview, 600, 500);

        myview.findViewById(R.id.bt_02).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               // Toast.makeText(MainActivity2.this, "点击了确定", Toast.LENGTH_SHORT).show();
                pop.dismiss();
            }
        });
        //pop.showAsDropDown(v);
        pop.showAtLocation(v, Gravity.CENTER, 0, 0);*/
        //dialog = builder.create();
        //dialog.show();
        //builder.show();

    }
在这顺便说一下 当退出一个程序的时候,需求是需要按两次退出时才退出:

实现代码:

private long mExitTime;
    @Override
    public void onBackPressed() {
        //super.onBackPressed();
        /*new AlertDialog.Builder(this)
                .setIcon(R.drawable.ic_launcher)
                .setTitle("确认对话框")
                .setMessage("您真的要退出程序么?")
                .setNegativeButton("取消", null)
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        finish();
                    }
                }).show();*/

       //在第一次点击退出的时候mExitTime默认是为0的所以一开始两个的差值必然是大于2分钟的 然后取当前按下的时间给mExtiTime进行赋值再进行差值判断
        if((System.currentTimeMillis()-mExitTime) > 2000){
            Toast.makeText(this, "请再按一次退出", Toast.LENGTH_SHORT).show();
            mExitTime = System.currentTimeMillis();
        } else {
            finish();
        }


    }















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值