当前位置: 首页 > news >正文

网站建设与运营 教材 崔公司自建网站备案

网站建设与运营 教材 崔,公司自建网站备案,网站建设培训班多少钱,肥城网站建设广州外地车牌定义 IntentService 是 Android中的一个封装类#xff0c;继承自四大组件之一的Service 功能 处理异步请求 实现多线程 应用场景 线程任务 需 按顺序、在后台执行 最常见的场景#xff1a;离线下载不符合多个数据同时请求的场景#xff1a;所有的任务都在同一个T…定义 IntentService 是 Android中的一个封装类继承自四大组件之一的Service 功能 处理异步请求 实现多线程 应用场景 线程任务 需 按顺序、在后台执行 最常见的场景离线下载不符合多个数据同时请求的场景所有的任务都在同一个Thread looper里执行 使用步骤 步骤1定义 IntentService的子类需复写onHandleIntent()方法 步骤2在Manifest.xml中注册服务 步骤3在Activity中开启Service服务 步骤1定义 IntentService的子类 传入线程名、复写onHandleIntent()方法 public class myIntentService extends IntentService {/** * 在构造函数中传入线程名字**/ public myIntentService() {// 调用父类的构造函数// 参数 工作线程的名字super(myIntentService);}/** * 复写onHandleIntent()方法* 根据 Intent实现 耗时任务 操作**/ Overrideprotected void onHandleIntent(Intent intent) {// 根据 Intent的不同进行不同的事务处理String taskName intent.getExtras().getString(taskName);switch (taskName) {case task1:Log.i(myIntentService, do task1);break;case task2:Log.i(myIntentService, do task2);break;default:break;}}Overridepublic void onCreate() {Log.i(myIntentService, onCreate);super.onCreate();}/** * 复写onStartCommand()方法* 默认实现 将请求的Intent添加到工作队列里**/ Overridepublic int onStartCommand(Intent intent, int flags, int startId) {Log.i(myIntentService, onStartCommand);return super.onStartCommand(intent, flags, startId);}Overridepublic void onDestroy() {Log.i(myIntentService, onDestroy);super.onDestroy();} }步骤2在Manifest.xml中注册服务 service android:name.myIntentServiceintent-filter action android:namecn.scu.finch//intent-filter /service步骤3在Activity中开启Service服务 public class MainActivity extends AppCompatActivity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 同一服务只会开启1个工作线程// 在onHandleIntent函数里依次处理传入的Intent请求// 将请求通过Bundle对象传入到Intent再传入到服务里// 请求1Intent i new Intent(cn.scu.finch);Bundle bundle new Bundle();bundle.putString(taskName, task1);i.putExtras(bundle);startService(i);// 请求2Intent i2 new Intent(cn.scu.finch);Bundle bundle2 new Bundle();bundle2.putString(taskName, task2);i2.putExtras(bundle2);startService(i2);startService(i); //多次启动}}测试结果 对比 与Service对比 与普通线程对比 源码分析 IntentService的源码工作流程如下 特别注意若启动IntentService 多次那么 每个耗时操作 则 以队列的方式 在 IntentService的 onHandleIntent回调方法中依次执行执行完自动结束 接下来我们将通过 源码分析 解决以下问题 IntentService 如何单独开启1个新的工作线程IntentService 如何通过onStartCommand() 将Intent 传递给服务 依次插入到工作队列中 问题1IntentService如何单独开启1个新的工作线程 主要分析内容 IntentService源码中的 onCreate()方法 Override public void onCreate() {super.onCreate();// 1. 通过实例化andlerThread新建线程 启动故 使用IntentService时不需额外新建线程// HandlerThread继承自Thread内部封装了 LooperHandlerThread thread new HandlerThread(IntentService[ mName ]);thread.start();// 2. 获得工作线程的 Looper 维护自己的工作队列mServiceLooper thread.getLooper();// 3. 新建mServiceHandler 绑定上述获得Looper// 新建的Handler 属于工作线程 -分析1mServiceHandler new ServiceHandler(mServiceLooper); }/** * 分析1ServiceHandler源码分析**/ private final class ServiceHandler extends Handler {// 构造函数public ServiceHandler(Looper looper) {super(looper);}// IntentService的handleMessage把接收的消息交给onHandleIntent()处理Overridepublic void handleMessage(Message msg) {// onHandleIntent 方法在工作线程中执行// onHandleIntent() 抽象方法使用时需重写 -分析2onHandleIntent((Intent)msg.obj);// 执行完调用 stopSelf() 结束服务stopSelf(msg.arg1);} }/** * 分析2 onHandleIntent()源码分析* onHandleIntent() 抽象方法使用时需重写**/ WorkerThreadprotected abstract void onHandleIntent(Intent intent); 问题2IntentService 如何通过onStartCommand() 将Intent 传递给服务 依次插入到工作队列中 /** * onStartCommand源码分析* onHandleIntent() 抽象方法使用时需重写**/ public int onStartCommand(Intent intent, int flags, int startId) {// 调用onStart-分析1onStart(intent, startId);return mRedelivery ? START_REDELIVER_INTENT : START_NOT_STICKY; }/** * 分析1onStart(intent, startId)**/ public void onStart(Intent intent, int startId) {// 1. 获得ServiceHandler消息的引用Message msg mServiceHandler.obtainMessage();msg.arg1 startId;// 2. 把 Intent参数 包装到 message 的 obj 发送消息中//这里的Intent 启动服务时startService(Intent) 里传入的 Intentmsg.obj intent;// 3. 发送消息即 添加到消息队列里mServiceHandler.sendMessage(msg); }总结 从上面源码可看出 IntentService本质 Handler HandlerThread 通过HandlerThread 单独开启1个工作线程IntentService创建1个内部 Handler ServiceHandler绑定 ServiceHandler 与 IntentService通过 onStartCommand() 传递服务intent 到ServiceHandler 、依次插入Intent到工作队列中 逐个发送给 onHandleIntent()通过onHandleIntent() 依次处理所有Intent对象所对应的任务 因此我们通过复写onHandleIntent() 在里面 根据Intent的不同进行不同线程操作 即可
http://www.eeditor.cn/news/120677/

相关文章:

  • 国外免费网站域名服务器查询软件微信的网站
  • 赤峰公司做网站做富集的网站
  • 智能网站建设哪家效果好做推广app赚钱的项目
  • 什么行业最需要网站建设网站模板 免费
  • 建设网站的条件在线旅游网站建设方案
  • 企业网站建设后期维护费用固原建站公司
  • php网站建设填空题wordpress 栏目
  • 专业服务网站建设域名有了怎么做网站
  • 中国最大的免费素材网站wordpress 编写页面代码
  • 网站开发项目策划成品软件源码网站大全
  • 北京网站建设有哪些浩森宇特wordpress鼠标悬停图片
  • 做非经营网站需要营业执照网络营销策略有哪些
  • 外贸询单seo运营招聘
  • 中天建设集团有限公司官网seo免费诊断联系方式
  • 南京做公司网站的公司哪家好物流发货平台
  • 自学网站查分数可以做兼职的网站有哪些工作
  • 有注入漏洞的网站源码东莞百度seo
  • 网站开发实践实验报告大兴网站建设首选公司
  • 昆明网站建设平台网站推广是做什么的
  • 制作网站需要用什么软件网站建设与网页设计可行性分析报告
  • 网站优化 代码有什么做礼品的卖家网站
  • 扬州专注企业网站建设宣威网站建设
  • 蚌埠市做家教网站上海网页制作培训学校
  • 冬青街 做网站企业查询网站有哪些
  • 网站开发还是安卓开发好eclipse网站开发流程
  • 跑腿网站开发wordpress英文
  • 网站标题权重宁波网站搭建公司
  • 网站关键词怎么做排名深圳app网站开发
  • 长沙网站关键词优化网站子目录绑定二级域名
  • 江苏运营网站建设业务用php做视频网站有哪些