综合运用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
- 综合运用BroadcastReceiver和Service模拟下载
- Service 和 BroadcastReceiver下载播放视频
- 【代码】Android -- Activity 、Service、BroadcastReceiver 综合使用
- 理解Service和BroadcastReceiver
- Service和BroadcastReceiver总结
- 关于Service和BroadcastReceiver
- Service和BroadcastReceiver
- 基于Service的播放器,Activity,Service,BroadcastReceiver综合使用
- android--service和broadcastReceiver基础
- 浅谈android Service和BroadCastReceiver
- 运用service、BroadcastReceiver保持app不被系统杀死
- BroadcastReceiver service
- 关于BroadcastReceiver 和 Service的那些事
- Android入门之Service和BroadcastReceiver
- Activity和Service通信 使用BroadcastReceiver
- Android笔记----Service应用和BroadcastReceiver组件
- Android面试(三)BroadCastReceiver和Service
- 集合和流的综合运用
- source insight 调用 vim
- 数组指针、指针数组、地址的强制转换内存布局
- PHP开发中常见的安全问题详解和解决方法
- 个人学习笔记---linux中断流程
- const & static
- 综合运用BroadcastReceiver和Service模拟下载
- Ubuntu14.04增加右键菜单=>“run_on_sh”
- 软件杂谈《四》
- 黑马程序员——C语言——数组
- HDU1597 - find the nth digit (找规律)
- Swift学习文档记录(一)函数
- Max Sum--hdoj 1003 dp
- Rime 协议栈缓冲区 packetbuf
- 正则表达式