IntentService AsyncTask,Thread

IntentService

1、在manifest.xml中声明

</activity>
        <service android:name=".MyService"></service>
        <service android:name=".MyIntentService"></service>
    </application>

2、MyIntentService类

public class MyIntentService extends IntentService {
    public MyIntentService(String name) {
        super(name);
    }
    public MyIntentService() {
        this("");
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d("","服务关闭");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        Log.d("","运行到IntentService");
        int count = 0;
        while (true){
            if(count>=100){
                count=0;
            }
            count++;
            Intent intent1 = new Intent();
            intent1.setAction(MainActivity.DOWN_LOAD_ACTION);
            intent1.putExtra("count", count);
            sendBroadcast(intent1);
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

3、activity中

//注册receiver
        receiver = new MyDownloadReceiver();
        IntentFilter filter = new IntentFilter();
        filter.addAction(DOWN_LOAD_ACTION);
        registerReceiver(receiver,filter);
//点击事件
            case R.id.button_stop:
                Intent intent1 = new Intent(getApplicationContext(),MyIntentService.class);
                stopService(intent1);
                break;
            case R.id.button_download:
                Intent intent = new Intent(getApplicationContext(),MyIntentService.class);
                startService(intent);
                break;
            default:
                break;
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(receiver);
    }

    class MyDownloadReceiver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
         int count = intent.getIntExtra("count",0);
            mProgressbar.setProgress(count);
        }
    }

AsyncTask

public class MainActivity extends Activity {
    private Button mButton;
    private ProgressBar mProgressbar;
    private int count = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mButton = (Button) findViewById(R.id.button);
        mProgressbar = (ProgressBar) findViewById(R.id.progressBar);
        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MyTask task = new MyTask();
                task.execute("开始执行吧");
            }
        });
    }

    class MyTask extends AsyncTask<String, String, String> {
        @Override
        protected void onProgressUpdate(String... values) {
            super.onProgressUpdate(values);
            int count = Integer.parseInt(values[0]);
            mProgressbar.setProgress(count);
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            mButton.setText(s);
        }

        @Override
        protected String doInBackground(String... params) {
            while (count < 101) {
                count++;
                publishProgress("" + count);

                try {
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            return "已经全部完成";
        }
    }
}

这里写图片描述

Thread

1、倒计时

 private Handler handler = new Handler() {
       @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case TIME_DESC:
                   String time = (String) msg.obj;
                    mButton.setText(time);
                    break;
                case TIME_DESC:
                    count--;
                    mButton.setText(count+"秒");
                    if(count>0) {                       try {
                           Thread.sleep(1000);
                       } catch (InterruptedException e) {                           e.printStackTrace();
                       }
                       handler.sendEmptyMessage(TIME_DESC);
                   }
                    break;
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        message = new Message();
        mButton = (Button) findViewById(R.id.button_desc);
        mButton2 = (Button) findViewById(R.id.button_send);
        mButton2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                handler.sendEmptyMessage(0);
            }
        });
        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                count = 60;
                handler.sendEmptyMessage(TIME_DESC);
                new Thread(new Runnable() {
                    @Override
                   public void run() {
                       while (count>0){
                           count--;
                            try {
                               Thread.sleep(1000);
                           } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                            Message msg = new Message();
                            msg.obj = count+"秒";
                            msg.what= TIME_DESC;
                            handler.sendMessage(msg);
                        }
                    }
                }).start();
            }
        });
    }

2、用handler封装, looper.prepare

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        message = new Message();
        mButton = (Button) findViewById(R.id.button_desc);
        mButton2 = (Button) findViewById(R.id.button_send);
        mButton2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                handler.sendEmptyMessage(0);
            }
        });
        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                count = 60;
                MyThread thread = new MyThread();
                thread.start();
                         }
        });
    }
    private Handler handler;
    class MyThread extends Thread {
        @Override
        public void run() {
            Looper.prepare();
            handler = new Handler(){
                @Override
                public void handleMessage(Message msg) {
                    Log.d("hand","接收到主线程发送过来的消息");
                }
            };
            Looper.loop();
        }
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值