关闭

Android中的线程

148人阅读 评论(0) 收藏 举报
分类:

在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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:17959次
    • 积分:699
    • 等级:
    • 排名:千里之外
    • 原创:52篇
    • 转载:12篇
    • 译文:0篇
    • 评论:0条
    文章分类