综合运用BroadcastReceiver和Service模拟下载

来源:互联网 发布:mac输入法标点符号 编辑:程序博客网 时间:2024/04/29 08:51

关于BroadcastReceiver和Service的指示可以参考文章
http://blog.csdn.net/taoolee/article/details/48297183;
http://blog.csdn.net/taoolee/article/details/48299467
整体实现思路
【1】实现服务
1新建MyService类实现服务
2在AndroidManifest.xml当中注册
3点击事件启动相应Intent的服务
【2】
1MyService当中的onStartCommand()方法启动在此方法中新建一个线程发送广播
【3】
1MainActivity当中接收广播
2onReceive()方法接收广播并得到下载进度滑动滚动条
这里写图片描述

1MyService.java
public class MyService extends Service {    private  int count;    private static final String  DOWN_LOAD_ACTION="com.service.test";    @Override    //当该Service被第一次创建后将立即回调该方法    public void onCreate() {        super.onCreate();        Log.d("11111111onCreate","onCreate");    }    @Override    //每次客户端调用startService(Intent)方法启动该Service时,都会回调该方法    public int onStartCommand(final Intent intent, int flags, int startId) {        new Thread(new Runnable() {            @Override            public void run() {                while(true){                    if(count>100){                        count=0;                    }                    count++;                    //线程当中启动广播                    Intent intent1=new Intent();                    intent1.setAction(DOWN_LOAD_ACTION);                    intent1.putExtra("count", count);                    sendBroadcast(intent1);                    try {                        Thread.sleep(200);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                }            }        }).start();        Log.d("11111111onStartCommand","onStartCommand");        return super.onStartCommand(intent, flags, startId);    }    @Override    //Service被关闭之前回调    public void onDestroy() {        super.onDestroy();        Log.d("1onDestroy", "111111111");    }    @Nullable    @Override    //Service子类必须实现的方法,该方法返回一个IBinder对象,应用程序可以通过该对象与Service组件通信    public IBinder onBind(Intent intent) {        Log.d("onBind", "11111111");        return null;    }}

AndroidManifest.xml

 <service android:name=".MyIntentService">          <intent-filter>              <action android:name="com.service"></action>          </intent-filter>      </service>

MainActivity.java

public class MainActivity extends AppCompatActivity implements View.OnClickListener{    private Button button_start;    private Button button_stop;    private Button start_download;    private ProgressBar progressBar;    private MyReceiver receiver;    private MyService service;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        button_start= (Button) findViewById(R.id.button_start);        button_stop= (Button) findViewById(R.id.button_stop);        button_start.setOnClickListener(this);        button_stop.setOnClickListener(this);        start_download= (Button) findViewById(R.id.start_download);        progressBar= (ProgressBar) findViewById(R.id.progressbar);        start_download.setOnClickListener(this);        progressBar.setOnClickListener(this);       //registerReceiver接收广播        receiver=new MyReceiver();        IntentFilter filter=new IntentFilter("com.service");        registerReceiver(receiver, filter);    }    //接收后需要onDestroy    @Override    protected void onDestroy() {        super.onDestroy();        unregisterReceiver(receiver);    }    @Override    public void onClick(View v) {        switch (v.getId()){            case R.id.button_start:               // Intent intent=new Intent(getApplicationContext(),MyService.class);                Intent intent=new Intent("com.service");                startService(intent);                break;            case R.id.button_stop:               // Intent intent1=new Intent(getApplicationContext(),MyService.class);                Intent intent1=new Intent("com.service");                stopService(intent1);                break;            case R.id.start_download:                Intent intent2=new Intent("com.service");                startService(intent2);                break;            default:                break;        }    }    //接收广播     class MyReceiver extends BroadcastReceiver {        @Override        public void onReceive(Context context, Intent intent) {        int count= intent.getIntExtra("count",1);        progressBar.setProgress(count);        }    }}

上面MyService在onStartCommand()方法中使用线程耗时模拟耗时任务,由于普通Service的执行会阻塞主线程,因此该线程会导致程序异常下一篇文章将会讲解IntentService解决上述问题

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 刚出生婴儿呕奶怎么办 宝宝拉颗粒便便怎么办 奶水不够宝宝又不吃奶粉怎么办 一岁突然不吃饭怎么办 母乳不够吃宝宝不吃奶粉怎么办 八个月不吃辅食怎么办 孩子长得太快怎么办 反复发烧到39度怎么办 儿童发烧到39度怎么办 7岁儿童发烧40度怎么办 7岁反复发烧39度怎么办 宝宝烧到39.5度怎么办 3岁儿童发烧39度怎么办 孩子发高烧怎么办39度5 3岁宝宝不吃水果怎么办 2岁宝宝不吃水果怎么办 4岁宝宝不吃水果怎么办 过早竖抱婴儿了怎么办 3个月宝宝认生怎么办 10天婴儿不拉屎怎么办 3个月宝宝不吃奶粉怎么办 婴儿吃青菜吃多怎么办 2月宝宝消化不好怎么办 吃母乳的宝宝便秘怎么办 婴儿拉肚子怎么办大便绿色的 10个月宝宝睡眠不好怎么办 婴幼儿消化不良引起的腹泻怎么办 小孩晚上睡觉不盖被子怎么办 镜子对着房间门怎么办 高血压引起的眼底出血怎么办 墙砖颜色选深了怎么办 墙砖颜色太深怎么办 30岁了没有朋友怎么办 产检宝宝腿短怎么办 2岁宝宝不学说话怎么办 4岁了还不会说话怎么办 两周岁还不说话怎么办 2岁了不会说话怎么办 一岁宝宝蛀牙了怎么办 分手了想联系他怎么办 和婆家人闹翻了怎么办