您的位置:首页 > 其它

IntentService AsyncTask,Thread

2015-09-09 20:21 225 查看

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();
        }
    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: