My Android Series[1]

开始前的话

啃找到的那两本好书,有些收获。不过这周我时间是在太赶,下周的My Android Series系列再开坑写那些安卓底层、开发技巧的东西。

这篇博文,我打算写写多线程、网络和蓝牙,一直以来自己对网络开发和多线程的掌握一直都不太好,也缺少开发实践;蓝牙则是这次写项目要用到,粗略看了下资料发现蓝牙和socket编程十分相似,所以也放到一块来说。

(好像这样的话一篇博文会特别长,我还是分成三篇来写吧——多线程+Service、网络、蓝牙)

Android中的多线程 及 Service(服务)

这里先说一下多线程和异步消息处理机制,因为Service是

Android 多线程 和 异步消息处理机制

多线程

andorid中的多线程和Java十分类似,语法都基本一样。

  1. 继承Thread
class MyThread extends Thread{
   @Override
   public void run(){
    //具体逻辑
   }
}

然后要用的时候 new一个MyThread实例,调用start()方法就ok

new MyThread().start();
  1. 实现Runnable
class MyThread implements Runnable{
   @Override
   public void run(){
    //具体逻辑
   }
}

启动线程的时候要改一下。使用Thread的构造函数接收一个Runnable参数,这里就是new出的MyThread对象;然后再调用Thread的start方法

MyThread myThread = new MyThread();
new Thread(myThread).start();
  1. anroid 中一些需要注意的东西
  • 无论何时启动APP,所有的组件都会运行在一个单独的线程中(默认的)——叫做主线程。这个线程主要用于处理UI的操作并为视图组件和小部件分发事件等,因此主线程也被称作UI线程。
  • 如果你在UI线程中运行一个耗时操作,那么UI就会被锁住,直到这个耗时操作结束。这是很不友好的用户体验设计,这就是为什么要把一些复杂的工作移动到其它的线程中去执行。如果你在UI线程中运行一个耗时的任务,那么很有可能会发生ANR(应用无响应),这样用户就会很快地结束掉你的APP。

这个部分我会在之后的深入研究Android机制中进行更为详细的学习分析,这里做个标记~

异步消息处理

之所以会有异步消息处理机制,就我个人的理解,是由于耗时操作虽然可以新开一个线程来处理,不过如果处理的结果对UI更新这样的操作,就会阻塞主线程。
根据操作系统的知识,异步机制就意味着我们不用阻塞在那些耗时的操作上,只需要发出一个耗时操作的请求就可以做接下来的事情,这样,就不会发生进程的阻塞。等到耗时操作完成之后会用特定的方式来通知我们,已经完成

  1. Android中的异步消息处理主要包括四个部分:
    Message, Handler, MessageQueue, Looper
    之前看的Android面试题目也有很多问道这部分的,足见重要性,继续说。
  • handler : 是整个异步消息处理机制中的控制者,处理者。它负责发送和处理消息
  • message : 主要是在不同的线程之间传递消息,作为一个消息的载体,其中的what字段等等,可以携带一定的数据信息。
  • MessageQueue: 消息队列,整个程序可能有很多异步消息需要处理,但 是对于一个线程来说(主线程),只能有一个handler ,MessageQueue。所以我们需要把还没有处理的消息放入消息队列当中。
  • looper:它相当于MessageQueue中的调度者,通过调用loop方法,进行一个无限循环,不断的从消息队列中取出消息,发送给handler进行处理。 上面的代码大家也看到了,我要做的是两件事,一个是要进行一个循环耗时操作,还有一个就是更新textview控件上面的内容。耗时操作是必须放在子线程中的,但是对UI的操作写到了一个handlemessage的函数中。
Android_异步消息处理 .jpg

这张图片摘自郭霖大神的第一行代码第九章
这个部分我的理解还不够深刻,之后有空可以重新填一下这个坑

  1. 总结一下异步消息处理机制的过程。
  • 首先需要在主线程中创建一个Handler对象,并重写handleMessage()方法。
  1. 当子线程中需要进行UI操作,就创建一个Message对象,并通过Handler将这条消息发送出去。

  2. 之后,指条消息就被添加到MessageQueue的队列中等待被处理,而Looper则会一直尝试从MessageQueue中取出待处理的消息,最后分发回Handler的handlerMessage()方法。

  3. 由于Handler是在主线程中创建的,所以此时handleMessage()方法中的代码也会在主线程中运行,也就可以进行UI操作了。

  4. 使用AsyncTask

这个部分我先跳过,创新杯回来再写

Service

什么是服务

  • Service是android 系统中的四大组件之一(Activity、Service、BroadcastReceiver、ContentProvider),它跟Activity的级别差不多,但不能自己运行只能后台运行,并且可以和其他组件进行交互。service可以在很多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务总是藏在后台的。
    Service的启动有两种方式:**context.startService() **和 context.bindService()

  • 这里放上Google给Service的定义

A Service is an application component that can perform long-running operations in the background and does not provide a user interface. Another application component can start a service and it will continue to run in the background even if the user switches to another application. Additionally, a component can bind to a service to interact with it and even perform interprocess communication (IPC). For example, a service might handle network transactions, play music, perform file I/O, or interact with a content provider, all from the background.

15:20 这个部分先写到这里,先去写会儿代码

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容