炫舞为什么不能交往我的信息不显示交往模式

两性关系的6大误区,哪些你曾深以为然? | 科学人 | 果壳网 科技有意思
两性关系的6大误区,哪些你曾深以为然?
恋爱科学 男人来自金星 女人来自水星 那个男人来自地球 性别差异 男女差异
恋爱关系 性关系 性欲 蜜月期 长期关系
本文作者:Gwendolyn Seidman
(/译)说到男女在恋爱中的表现,每个人都有一套自己的看法——通常是关于两性如何如何不同的。然而看法归看法,男女在恋爱关系中实际如何,科学研究怎么说?
一提到男女恋爱那点事儿,人们总有说不尽的“经验之谈”。那些翻来覆去听见的说法,有多少是靠谱的?图片来源:Imagentle/友情提供
其实,两性比我们想象中更相似,许多经验之谈其实并没有道理。下面,我们来分析一下常见的六大误区:
女人比男人更浪漫?
考虑到大部分言情小说和浪漫喜剧的受众都是女性,这可能有点令人难以置信。但实际上,男性对爱情的浪漫情怀比女性更多。浪漫信念量表(Romantic Beliefs Scale)是一种常用的衡量浪漫主义的分析方法,人们需要对一系列说法的赞同程度进行打分,例如“我的真爱只有一个”和“如果我爱一个人,就能够克服任何障碍和ta在一起”。而研究结果发现,男性打出的分数通常比女性更高[1]。另外,男性也会比女性更多地相信所谓的“一见钟情”[2,3]。
“外貌协会”的都是男人?
这种说法倒算是有一定道理,因为许多研究显示,当人们被问及在择偶会关注哪些方面时,男性对外表的看重程度会比女性更高[4]。不过进一步分析这些数据就会发现,其实男人女人都是“外貌协会”,只是男性对外表的关注比女性稍多一些。在一项影响深远的研究中,男女受试者对潜在伴侣的一系列特征进行排序,平均而言,男性认为外表排第四位,而女性则把外表排在了第六位[5],因此两性都挺注重伴侣外表,但它都不是最重要的。
然而,这些数据只体现出男性和女性声称自己在乎些什么。实际上,他们会选择与怎样的男女约会呢?在一个经典的人际吸引实验中,大学生被随机配对进行约会,结果发现,不论男女,对方的外貌都是决定他们是否会与对方再次约会的主要因素[6]。
美色当前,男性女性其实都是“外貌协会”的成员。只是男性对外貌的重视程度比女性高那么一点点。图片来源:
在更近期的一项实验中,研究人员探究了大学生在速配活动中的择偶喜好。在参加活动之前,学生们评价了不同特征对择偶选择的影响,结果呈现出了预料之中的性别差异——女性比男性更不看重外表。但是,当研究者们观察他们在活动中真正选择的对象时,两性的这种差异却消失了,不论男女都会选择长得更好看的对象[7]。因此,男女都喜欢颜值高的,而男性对外貌的重视程度只比女性高一点点。针对对约会时选择的研究说明,两性都会迷恋长相。
女性对随意性行为没有兴趣?
许多早期的有关男女性伴侣的研究支持这种说法[8,9]。然而,虽然总体上来说男性比女性更喜欢也更容易接受随意的性行为,但女性对它的兴趣被低估了。
原因有两个。首先,女性承认喜欢随意性行为并不符合当前的社会道德标准,因此,在对人们进行性伴侣数量的问卷调查时,不少研究者都曾推测男性会夸大人数,而女性则会有所隐瞒,因此从表面看来男性似乎有更多性伴侣而实则不然[10]。
在一项研究中,研究人员给参与者连接了假的测谎仪,并询问了他们的性生活史[11]。没有连接测谎仪的参与者给出了更符合社会预期的结果,也就是男性性伴侣比女性更多。然而对那些担心撒谎会仪器被发现的人们来说,女性报告的性伴侣数量反而比男性稍多。
女性一定要在时机合适的情况下才会选择发生随意性行为,并不是她们不感兴趣,而是对性伴侣更加挑剔。泰瑞·康利(Terri Conley)研究了具体情境因素对女性参与随意性行为意愿的影响[12]。她让实验对象想象一些虚构的情境,比如有名人或传说床上功夫一流的朋友希望和他/她发生性行为,结果发现,女性接受邀请可能性和男性不相上下。她还询问了人们实际的随意性行为史,结果则和以往研究结果一致,女性拒绝的情况比男性更多。不过,女性是否会接受邀请主要取决于她们对男性性技巧的主观认识。就像在假设情境中所表现的一样,女性是愿意与别人共度春宵的——只要那个人值得。
而宣称女性对随意性行为不感兴趣的那个最著名的实验,设定的情景其实是女性被陌生人邀请发生一夜情。可是研究已经发现,一夜情实际上是最不常见的随意性行为,而更为常见的随意性行为伴侣通常是非正式约会对象、朋友或前任[13,14]。
男女对恋爱的表现和态度有本质区别?
这种说法在流行文化中源远流长。在《男人来自火星,女人来自金星》一书中,约翰·格雷(John Gray)主张男女有着天壤之别,犹如来自不同星球。而实际上,两性差异在多数方面都很小,而个体间的差别要比男女之间的差别更多样[15]。
“男人来自火星,女人来自金星”这句话可谓影响深远,然而男人和女人归根到底都是地球人,两性之间的差异在大多数方面都不突出,而且还没个体与个体之间的差异多样。图片来源:
两性差异“在统计学上是显著的”,并不意味着差异很大,而仅仅说明平均而言,这些差异的存在是可靠的。比如,平均来说,男性比女性高,但身高一样的男女也有很多,甚至有许多女性比男性要高。男女的大部分性格差异,跟两性的身高差异比起来都要小得多。事实上,两性在恋爱关系中的需求非常相似,比如,二者都认为友善、个性风趣和聪慧是三个最重要的择偶因素[5]。
在处理与伴侣之间的关系时,只关注性别间差异通常会让事情过度简化并夸大事实,这只会使伴侣之间的理解有减无增[16]。
男性和女性解决冲突的方式截然不同?
大多数研究提示男女解决恋爱矛盾的方式并无明显差异[17]。不过,这种说法也算有一些道理,因为有些情侣在解决问题时会陷入所谓“你说我躲”的恶性循环模式,也就是一方会提出问题并坚持要求理论,而另一方则会选择逃避争论。要求的一方越是紧紧相逼,另一方就躲避得越厉害,使得前者更加下定决心要说清楚,最终导致双方都不好受[18]——在这种情况下,提出要求的一方通常是女性[19]。
然而,即使是这样的特例,也更多的是因为双方权力关系而非两性差异导致的。在一些研究中,情侣被要求讨论他们关系中的一个问题,有时是女方希望改变的问题,有时则相反。研究者发现,要求或退缩的角色不取决于性别,而是取决于哪一方希望改变。当讨论的话题是女方希望改变的事,那么她就更有可能称为要求的一方,而如果问题是男方希望改变的事,那么角色就会互换[20]。
那么,以往的研究中为什么会出现如此一致的性别差异呢?这是由于在一段关系中,希望改变的一方通常都是弱势的一方,而另一方则更倾向于维持现状。对于我们的社会来说,男性在传统意义上比女性更强势,因此女性在恋爱中通常是要求改变的一方。当然,这种动态正在发生变化。但即便是在权力不均衡的情况下,女性也是因为想改变才要求讨论,而非因为她们解决矛盾的方式和男性不同。
家暴的施暴者总是男性?
一提到家暴受害者,人们通常第一反应都联想到女性。确实,女性家暴受害者所受到的伤害通常比男性更严重,男性实施的家暴也的确更频繁和严重[22,23,24]。然而,男性也经常会成为家暴的受害者。近期,对英国成年人进行的一项调查发现,40%的家暴受害者是男性[25]。美国一项全国调查则发现,12.1%的女性和11.3%的男性自诉在过去一年中对伴侣实施过家暴[26]。其他研究也表明,女性使用暴力的几率与男性很接近[27]。由于在人们的刻板印象中男性不可能是家暴受害者,而男性又担心坦诚会蒙羞,许多男性会选择隐瞒不报或不寻求帮助[28]。然而,即使男性伤害程度没那么大,但男性也很容易遭到身体虐待。
“家庭暴力伤害的是每一个人”。和女性一样,男性也会是家庭暴力的受害者。图片来源:
根据性别刻板印象来处理恋爱关系的做法,是有害无益,这些说法有些彻底错误,即使有点道理,也过分夸大了事实。与我们谈恋爱的都是独一无二的人,在解决恋爱中的具体问题时,这些迷思并没有建设性的意义。
(编辑:Calo)
Sprecher, S., & Metts, S. (1989). Development of the 'Romantic Beliefs Scale' and examination of the effects of gender and gender-role orientation. Journal of Social and Personal Relationships, 6(4), 387-411. doi:10.
Hatfield, E., & Sprecher, S. (1986). Measuring passionate love in intimate relationships. Journal of Adolescence, 9(4), 383-410. doi:10.-43-4
Northrup, C., Schwartz, P., & Witte, J. (2013). The normal bar: The surprising secrets of happy couples and what they reveal about creating a new normal in your relationship. New York, NY: Crown Publishing Group.
Feingold, A. (1990). Gender differences in effects of physical attractiveness on romantic attraction: A comparison across five research paradigms. Journal of Personality and Social Psychology, 59, 981-993. doi: 10.14.59.5.981
Buss, D. M., & Barnes, M. (1986). Preferences in human mate selection. Journal of Personality and Social Psychology, 50, 559-570. doi: 10.14.50.3.559
Walster, E., Aronson, V., Abrahams, D., & Rottman, L. (1966). Importance of physical attractiveness in dating behavior. Journal of Personality and Social Psychology, 4(5), 508-516.
Eastwick, P. W., & Finkel, E. J. (2008). Sex differences in mate preferences revisited: Do people know what they initially desire in a romantic partner? Journal of Personality and Social Psychology, 94(2), 245-264. doi:10.14.94.2.245
Clark, R. D., & Hatfield, E. (1989). Gender differences in receptivity to sexual offers. Journal of Psychology and Human Sexuality, 2(1), 39-55. doi:10.n01_04
Laumann, E. O., Gagnon, J. H., Michael, R. T., Michaels, S. (1994). The social organization of sexuality: Sexual practices in the United States. Chicago: University of Chicago Press.
Willetts, M. C., Sprecher, S., & Beck, F. D. (2004). Overview of sexual practices and attitudes within relational contexts. In J. H. Harvey, A. Wenzel, S. Sprecher (Eds.), The handbook of sexuality in close relationships (pp. 57-85). Mahwah, NJ: Lawrence Erlbaum Associates Publishers.
Alexander, M. G., & Fisher, T. D. (2003). Truth and consequences: Using the bogus pipeline to examine sex differences in self-reported sexuality. The Journal of Sex Research, 40, 27-35. doi: 10.
Conley, T. D. (2011). Perceived propose personality characteristics and gender differences in acceptance of casual sex offers. Journal of Personality and Social Psychology, 100, 309-329. doi:10.2
Herbenick, D., Reece, M., Schick, V., Sanders, S. A., Dodge, B., & Fortenberry, J. D. (2010). An event-level analysis of the sexual characteristics and composition among adults ages 18 to 59: Results from a national probability sample in the United States. Journal of Sexual Medicine, 7 Suppl 5, 346-361. doi:10.1111/j.10.02020.x.
Walsh, J. L., Fielder, R. L., Carey, K. B., & Carey, M. P. (2014). Do alcohol and marijuana use decrease the probability of condom use for college women? Journal of Sex Research, 51, 145-158. doi:10.9.
Schwartz, P., & Rutter, V. (1998). The gender of sexuality. Thousand Oaks, CA: Pine Forge Press.
Miller, R. (2012). Intimate relationships (6th ed). New York, NY: McGraw-Hill.
Gayle, B. M., Preiss, R. M., & Allen, M. (2002). A meta-analytic interpretation of intimate and non-intimate interpersonal conflict. In M. Allen, R. W. Preiss, B. M. Gayle, & N. A. Burrell (Eds.), Interpersonal communication research: Advances through meta-analysis (pp. 345-368). Mahwah, NJ: Erlbaum.
Caughlin, J. P., & Huston, T. L. (2002). A contextual analysis of the association between demand/withdraw and marital satisfaction. Personal Relationships, 9, 95-119. doi: 10.11.00007
Christensen, A., & Heavy, C. (1993). Gender differences in marital conflict: The demand/withdraw interaction pattern. In S. Oskamp & M. Costanzo (Eds.), Gender issues in contemporary society (pp. 113-141). Newbury Park, CA: Sage.
Klinetob, N. A., & Smith, D. A. (1996). Demand-withdraw communication in marital interaction: Tetss of interpersonal contingency and gender role hypotheses. Journal of Marriage and the Family, 58, 945-957.
Christensen, A. & Heavy, C. L. (1990). Gender and social structure in the demand/withdraw pattern of marital conflict. Journal of Personality and Social Psychology, 59, 73-81. doi:10.14.59.1.73 (link is external)
Archer, J. (2002). Sex differences in physically aggressive acts between heterosexual partners: A meta-analytic review. Aggression and Violent Behavior, 7, 313-351. doi: 10.-61-1
Houry, D., Rhodes, K. V., Kemball, R. S., Click, L., Cerulli, C., McNutt, L., & Kaslow, N. J. (2008). Differences in female and male victims and perpetrators of partner violence with respect to WEB scores. Journal of Interpersonal Violence, 23(8), . doi:10.
Johnson, M. P., & Leone, J. M. (2005). The differential effects of intimate terrorism and situational couple violence: Findings from the National Violence Against Women Survey. Journal of Family Issues, 26, 322-349. doi: 0.X
Parity-UK (2010). Domestic violence: The male perspective.
Hampton, R. L., Gelles, R. J., & Harrop, J. W. (1989). Is violence in black families increasing? A comparison of 1975 and 1985 national survey rates. Journal of Marriage and Family, 51, 969-980.
Strauss, M. A. (1999). The controversy over domestic violence by women: A methodological, theoretical, and sociology of science analysis. In. X. B. Arriaga & S. Oskamp (Eds.), Violence in intimate relationships (pp. 17-44). Thousand Oaks, CA: Sage.
Tsui, V., Cheung, M., & Leung, P. (2010). Help-seeking among male victims of partner abuse: Men's hard times. Journal of Community Psychology, 38, 769-780. doi: 10.1002/jcop.20394
文章题图:Lim Yong Hian/友情提供
独家授权果壳网()编译发表,严禁转载。
Copyright (C) 2015, . All rights reserved. A production of Dr. L Industries, LLC.
Science Of Relationships,Debunking 6 Myths About Men, Women, and Their Relationships
你可能感兴趣
生物物理博士生
记得大学宿舍一妹子看了《男人来自火星女人来自金星》觉得很有道理,于是很高兴地推荐给她异地男朋友看。没过一会男朋友电话打来弱弱地问:“我是不是又做错什么了。”
为什么这篇试图端正男女态度的文章下面会有一堆性别歧视和性别刻板印象的评论???
引用文章内容:近期,对英国成年人进行的一项调查发现,40%的家暴受害者是男性[25]腐国男子多奇志
显示所有评论
全部评论(75)
一提到家暴受害者,人们通常第一反应都联想到女性。确实,女性家暴受害者所受到的伤害通常比男性更严重,男性实施的家暴也的确更频繁和严重[22,23,24]。然而,男性也经常会成为家暴的受害者。近期,对英国成年人进行的一项调查发现,40%的家暴受害者是男性[25]。美国一项全国调查则发现,12.1%的女性和11.3%的男性自诉在过去一年中对伴侣实施过家暴[26]。其他研究也表明,女性使用暴力的几率与男性很接近[27]。由于在人们的刻板印象中男性不可能是家暴受害者,而男性又担心坦诚会蒙羞,许多男性会选择隐瞒不报或不寻求帮助[28]。然而,即使男性伤害程度没那么大,但男性也很容易遭到身体虐待。
引用文章内容:近期,对英国成年人进行的一项调查发现,40%的家暴受害者是男性[25]腐国男子多奇志
引用 的话:腐国男子多奇志2333来自
"如果我爱一个人"? 如果我爱的不是人?如果我是人外控??来自
引用文章内容:外貌协会”的都是男人? 这种说法倒算是有一定道理,因为许多研究显示,当人们被问及在择偶会关注哪些方面时,男性对外表的看重程度会比女性更高nonono,我觉得这个误区不常见吧,你看看哪些女性外貌协会的和那些追星族
生物物理博士生
记得大学宿舍一妹子看了《男人来自火星女人来自金星》觉得很有道理,于是很高兴地推荐给她异地男朋友看。没过一会男朋友电话打来弱弱地问:“我是不是又做错什么了。”
全文只重点看了第三条..........捂脸............
对于两性区别的一切分析都是无用且垂死的挣扎,如果你是女人,抬头挺胸腿并拢,如果是男人,请随意挑选~ 咳咳咳这里首先要注意两性关系的前提是未婚,一旦已婚,女人立刻就会从你家大米变成我家大米,男人立刻就会从啊我好爱你变成老婆我错了。没人想找,找到想搞,搞了想跑,这是任何一个人的本能,然而,时代的好青年一般会做到“跑不掉就不再找”,然后就是结婚生子交工资卡跪搓衣板。。关于家庭暴力我就想说一句话!拜托你区分清楚我老背上的指甲印、我脸上的巴掌印和我另一半脸上的巴掌印先!秀恩爱的疤和为了调节夫妻情趣故意先给自己一顿胖揍(就为了看看她心疼的样子然而并没什么卵用一回疼二回嗨三回四回催着来)什么的你们这些单身科技集客宅腐汪能懂?唉不好意思跑题了我只是好不容易找到个吐槽的地方,爽!(咳咳,我怎么,咦?这是哪里,老婆~老婆不要啊老婆~啊♂)
一切试图在两性关系中寻找规律的行为都是愚蠢的,仅仅反映出我们对于无法掌控此事的根深蒂固的恐惧。
引用 的话:一提到家暴受害者,人们通常第一反应都联想到女性。确实,女性家暴受害者所受到的伤害通常比男性更严重,男性实施的家暴也的确更频繁和严重[22,23,24]。然而,男性也经常会成为家暴的受害者。近期,对英国...以后要把家暴和女司机放在一起都是地图炮,一会儿赞同,一会儿反对
引用文章内容:女人比男人更浪漫?我觉得单凭下文提到的那两条,就能看出这文的作者对浪漫的理解和部分女性有着很大差异【这标题,不要总想搞个大新闻
引用 的话:记得大学宿舍一妹子看了《男人来自火星女人来自金星》觉得很有道...……无端感觉这对家伙挺可爱的。
引用 的话:对于两性区别的一切分析都是无用且垂死的挣扎,如果你是女人,抬...呃,我只想说,让该死的女权主义见鬼去吧。什么,哦,老婆大人,我这就去洗碗。。。。。。
引用文章内容:因此,男女都喜欢颜值高的,而男性对外貌的重视程度只比女性高一点点。针对对约会时选择的研究说明,两性都会迷恋长相。这个看脸的世界啊
人人都知道的表面现象。毫无深度。
图不错,尤其是克里斯和斯嘉丽那张,赏心悦目
为什么这篇试图端正男女态度的文章下面会有一堆性别歧视和性别刻板印象的评论???
引用 的话:腐国男子多奇志他们家暴受害者是男性没错...可是施暴者也是男性啊.2333
然并卵·········
调查受众是片面的。 数据上的逻辑应用到高复杂度的人性上,以目前的信息征集环境来说还不够严谨。
引用 的话:为什么这篇试图端正男女态度的文章下面会有一堆性别歧视和性别刻板印象的评论???因为这些调查结果未交待在什么样的经济基础,所以说调查结果具有片面性,以偏概全。
说的蛮中肯的
引用 的话:都没有说到点子上。最大的误区是:你们居然傻逼到以为女人会“真的爱你”。你试试告诉女朋友你家里出了状况,现在一贫如洗。你的说法过于武断了,不是所有的女性都会这么做。
引用 的话:对于两性区别的一切分析都是无用且垂死的挣扎,如果你是女人,抬头挺胸腿并拢,如果是男人,请随意挑选~ 咳咳咳这里首先要注意两性关系的前提是未婚,一旦已婚,女人立刻就会从你家大米变成我家大米,男人立刻就会...啊哦
引用 的话:对于两性区别的一切分析都是无用且垂死的挣扎,如果你是女人,抬头挺胸腿并拢,如果是男人,请随意挑选~ 咳咳咳这里首先要注意两性关系的前提是未婚,一旦已婚,女人立刻就会从你家大米变成我家大米,男人立刻就会...就我个人了解,所谓随意性行为,发生在婚后人士身上的着实不少,不论男女。
女人是情感的动物,男人是身体的动物,所以不难理解了吧
引用 的话:你试着告诉你男朋友你怀孕了,该怎么办?………………想象一个男人对他男朋友说“我怀孕了”……一下子就特别不好了……
引用 的话:你的说法过于武断了,不是所有的女性都会这么做。可惜我见到的多数都是这样。自己交往过的,看身边的朋友交往的女人。自私,喜欢推卸责任,缺乏对恋人的关心而对自己得到的关心视作理所当然,重视不相干的人员的意见超过重视自己的恋人的想法。交往中重视“浪漫”而内心极度在意金钱,我不知道是女人本性如此,还是这个时代就是这样。你能想像一下,我同学的女友,要求我刚入职的同学, 每月给还在读书的她2000块,这几乎压死了还在实习阶段的我那可怜的同学,而数次的吵架的原因,都是“她的舍友在卧谈会上说了几句话”想像一下我的前女友,在工资还只有我的一半不到的时候,抱怨最多的,就是“你没有房子,以后的还房贷,日子可怎么过”,说的最多的就是“我姐姐好幸福啊,姐夫这么能干,姐姐都不需要去工作,只要做点自己感兴趣的事情就好了”,吵架的原因也很简单“你是不是嫌弃我了?我姐夫就从来不会对我姐姐提出要求,你就是要接受我的全部”。啊,对了,还有,分手的前奏曲,是我说“那里人结婚要20万礼金,我可出不起”,当晚她打电话说我俩不合适云云,虽然被我劝阻了。当然,后来我确认,她当时以及在家人的介绍下认识了一个有房子的上海男人,就差找个理由把我踹掉而已。当然,居然不适嫁给她姐夫,让我有点意外。==================================说起来,昨天夜班的时候,和自家的女技术助理聊天。她以前线上的生产组长。她就高兴的炫耀说她家的房子是她和老公一起买的,特有成就感。这是个30+的女人。线上的工作,是做二休二,一个月夜班一个月白班,我确信她比我前女友辛苦,工资也比我前女友高。以前同组的一个女同事,她老公经商的,很有钱。她才是真的“因为兴趣在工作”。但她工作的很努力,细致。在PIE里面也很有名气的。长相、身材上,在整个公司里也是正数前三吧。这个也是30+的年纪了。==================================可能真的是时代已经变了吧。
看了《自私的基因》和《精子战争》以及《进化心理学》早就不这么认为了。
我觉得家暴这方面,你只调查了英国,可是很多其它国家不一定都和英国一样,你的数据不够全面我认为。也许你应该调查下中国,毕竟中国人口比较多嘛。
显示所有评论
(C)2017果壳网&&&&京ICP证100430号&&&&京网文[-239号&&&&新出发京零字东150005号&&&&
违法和不良信息举报邮箱:&&&&举报电话:158178人阅读
【android 进阶之路】(74)
【Android 源码解析】(30)
转载请标明出处:&,本文出自很多人面试肯定都被问到过,请问Android中的Looper , Handler , Message有什么关系?本篇博客目的首先为大家从源码角度介绍3者关系,然后给出一个容易记忆的结论。1、 概述Handler 、 Looper 、Message 这三者都与Android异步消息处理线程相关的概念。那么什么叫异步消息处理线程呢?异步消息处理线程启动后会进入一个无限的循环体之中,每循环一次,从其内部的消息队列中取出一个消息,然后回调相应的消息处理函数,执行完成一个消息后则继续循环。若消息队列为空,线程则会阻塞等待。说了这一堆,那么和Handler 、 Looper 、Message有啥关系?其实Looper负责的就是创建一个MessageQueue,然后进入一个无限循环体不断从该MessageQueue中读取消息,而消息的创建者就是一个或多个Handler 。2、 源码解析1、Looper 对于Looper主要是prepare()和loop()两个方法。首先看prepare()方法public static final void prepare() {
if (sThreadLocal.get() != null) {
throw new RuntimeException(&Only one Looper may be created per thread&);
sThreadLocal.set(new Looper(true));
sThreadLocal是一个ThreadLocal对象,可以在一个线程中存储变量。可以看到,在第5行,将一个Looper的实例放入了ThreadLocal,并且2-4行判断了sThreadLocal是否为null,否则抛出异常。这也就说明了Looper.prepare()方法不能被调用两次,同时也保证了一个线程中只有一个Looper实例~相信有些哥们一定遇到这个错误。下面看Looper的构造方法:private Looper(boolean quitAllowed) {
mQueue = new MessageQueue(quitAllowed);
mThread = Thread.currentThread();
在构造方法中,创建了一个MessageQueue(消息队列)。然后我们看loop()方法:public static void loop() {
final Looper me = myLooper();
if (me == null) {
throw new RuntimeException(&No L Looper.prepare() wasn't called on this thread.&);
final MessageQueue queue = me.mQ
// Make sure the identity of this thread is that of the local process,
// and keep track of what that identity token actually is.
Binder.clearCallingIdentity();
final long ident = Binder.clearCallingIdentity();
for (;;) {
Message msg = queue.next(); // might block
if (msg == null) {
// No message indicates that the message queue is quitting.
// This must be in a local variable, in case a UI event sets the logger
Printer logging = me.mL
if (logging != null) {
logging.println(&&&&&& Dispatching to & + msg.target + & & +
msg.callback + &: & + msg.what);
msg.target.dispatchMessage(msg);
if (logging != null) {
logging.println(&&&&&& Finished to & + msg.target + & & + msg.callback);
// Make sure that during the course of dispatching the
// identity of the thread wasn't corrupted.
final long newIdent = Binder.clearCallingIdentity();
if (ident != newIdent) {
Log.wtf(TAG, &Thread identity changed from 0x&
+ Long.toHexString(ident) + & to 0x&
+ Long.toHexString(newIdent) + & while dispatching to &
+ msg.target.getClass().getName() + & &
+ msg.callback + & what=& + msg.what);
msg.recycle();
第2行:public static Looper myLooper() {
return sThreadLocal.get();}方法直接返回了sThreadLocal存储的Looper实例,如果me为null则抛出异常,也就是说looper方法必须在prepare方法之后运行。第6行:拿到该looper实例中的mQueue(消息队列)13到45行:就进入了我们所说的无限循环。14行:取出一条消息,如果没有消息则阻塞。27行:使用调用
msg.target.dispatchMessage(msg);把消息交给msg的target的dispatchMessage方法去处理。Msg的target是什么呢?其实就是handler对象,下面会进行分析。 44行:释放消息占据的资源。Looper主要作用:1、 与当前线程绑定,保证一个线程只会有一个Looper实例,同时一个Looper实例也只有一个MessageQueue。2、 loop()方法,不断从MessageQueue中去取消息,交给消息的target属性的dispatchMessage去处理。好了,我们的异步消息处理线程已经有了消息队列(MessageQueue),也有了在无限循环体中取出消息的哥们,现在缺的就是发送消息的对象了,于是乎:Handler登场了。2、Handler使用Handler之前,我们都是初始化一个实例,比如用于更新UI线程,我们会在声明的时候直接初始化,或者在onCreate中初始化Handler实例。所以我们首先看Handler的构造方法,看其如何与MessageQueue联系上的,它在子线程中发送的消息(一般发送消息都在非UI线程)怎么发送到MessageQueue中的。public Handler() {
this(null, false);
public Handler(Callback callback, boolean async) {
if (FIND_POTENTIAL_LEAKS) {
final Class&? extends Handler& klass = getClass();
if ((klass.isAnonymousClass() || klass.isMemberClass() || klass.isLocalClass()) &&
(klass.getModifiers() & Modifier.STATIC) == 0) {
Log.w(TAG, &The following Handler class should be static or leaks might occur: & +
klass.getCanonicalName());
mLooper = Looper.myLooper();
if (mLooper == null) {
throw new RuntimeException(
&Can't create handler inside thread that has not called Looper.prepare()&);
mQueue = mLooper.mQ
mCallback =
mAsynchronous =
14行:通过Looper.myLooper()获取了当前线程保存的Looper实例,然后在19行又获取了这个Looper实例中保存的MessageQueue(消息队列),这样就保证了handler的实例与我们Looper实例中MessageQueue关联上了。然后看我们最常用的sendMessage方法
public final boolean sendMessage(Message msg)
return sendMessageDelayed(msg, 0);
public final boolean sendEmptyMessageDelayed(int what, long delayMillis) {
Message msg = Message.obtain();
msg.what =
return sendMessageDelayed(msg, delayMillis);
} public final boolean sendMessageDelayed(Message msg, long delayMillis)
if (delayMillis & 0) {
delayMillis = 0;
return sendMessageAtTime(msg, SystemClock.uptimeMillis() + delayMillis);
} public boolean sendMessageAtTime(Message msg, long uptimeMillis) {
MessageQueue queue = mQ
if (queue == null) {
RuntimeException e = new RuntimeException(
this + & sendMessageAtTime() called with no mQueue&);
Log.w(&Looper&, e.getMessage(), e);
return enqueueMessage(queue, msg, uptimeMillis);
}辗转反则最后调用了sendMessageAtTime,在此方法内部有直接获取MessageQueue然后调用了enqueueMessage方法,我们再来看看此方法: private boolean enqueueMessage(MessageQueue queue, Message msg, long uptimeMillis) {
msg.target =
if (mAsynchronous) {
msg.setAsynchronous(true);
return queue.enqueueMessage(msg, uptimeMillis);
}enqueueMessage中首先为meg.target赋值为this,【如果大家还记得Looper的loop方法会取出每个msg然后交给msg,target.dispatchMessage(msg)去处理消息】,也就是把当前的handler作为msg的target属性。最终会调用queue的enqueueMessage的方法,也就是说handler发出的消息,最终会保存到消息队列中去。现在已经很清楚了Looper会调用prepare()和loop()方法,在当前执行的线程中保存一个Looper实例,这个实例会保存一个MessageQueue对象,然后当前线程进入一个无限循环中去,不断从MessageQueue中读取Handler发来的消息。然后再回调创建这个消息的handler中的dispathMessage方法,下面我们赶快去看一看这个方法:public void dispatchMessage(Message msg) {
if (msg.callback != null) {
handleCallback(msg);
if (mCallback != null) {
if (mCallback.handleMessage(msg)) {
handleMessage(msg);
}可以看到,第10行,调用了handleMessage方法,下面我们去看这个方法:
* Subclasses must implement this to receive messages.
public void handleMessage(Message msg) {
可以看到这是一个空方法,为什么呢,因为消息的最终回调是由我们控制的,我们在创建handler的时候都是复写handleMessage方法,然后根据msg.what进行消息处理。例如:private Handler mHandler = new Handler()
public void handleMessage(android.os.Message msg)
switch (msg.what)
case value:
};到此,这个流程已经解释完毕,让我们首先总结一下1、首先Looper.prepare()在本线程中保存一个Looper实例,然后该实例中保存一个MessageQueue对象;因为Looper.prepare()在一个线程中只能调用一次,所以MessageQueue在一个线程中只会存在一个。2、Looper.loop()会让当前线程进入一个无限循环,不端从MessageQueue的实例中读取消息,然后回调msg.target.dispatchMessage(msg)方法。3、Handler的构造方法,会首先得到当前线程中保存的Looper实例,进而与Looper实例中的MessageQueue想关联。4、Handler的sendMessage方法,会给msg的target赋值为handler自身,然后加入MessageQueue中。5、在构造Handler实例时,我们会重写handleMessage方法,也就是msg.target.dispatchMessage(msg)最终调用的方法。好了,总结完成,大家可能还会问,那么在Activity中,我们并没有显示的调用Looper.prepare()和Looper.loop()方法,为啥Handler可以成功创建呢,这是因为在Activity的启动代码中,已经在当前UI线程调用了Looper.prepare()和Looper.loop()方法。3、Handler post今天有人问我,你说Handler的post方法创建的线程和UI线程有什么关系?其实这个问题也是出现这篇博客的原因之一;这里需要说明,有时候为了方便,我们会直接写如下代码:mHandler.post(new Runnable()
public void run()
Log.e(&TAG&, Thread.currentThread().getName());
mTxt.setText(&yoxi&);
});然后run方法中可以写更新UI的代码,其实这个Runnable并没有创建什么线程,而是发送了一条消息,下面看源码: public final boolean post(Runnable r)
sendMessageDelayed(getPostMessage(r), 0);
private static Message getPostMessage(Runnable r) {
Message m = Message.obtain();
m.callback =
}可以看到,在getPostMessage中,得到了一个Message对象,然后将我们创建的Runable对象作为callback属性,赋值给了此message.注:产生一个Message对象,可以new &,也可以使用Message.obtain()方法;两者都可以,但是更建议使用obtain方法,因为Message内部维护了一个Message池用于Message的复用,避免使用new 重新分配内存。 public final boolean sendMessageDelayed(Message msg, long delayMillis)
if (delayMillis & 0) {
delayMillis = 0;
return sendMessageAtTime(msg, SystemClock.uptimeMillis() + delayMillis);
} public boolean sendMessageAtTime(Message msg, long uptimeMillis) {
MessageQueue queue = mQ
if (queue == null) {
RuntimeException e = new RuntimeException(
this + & sendMessageAtTime() called with no mQueue&);
Log.w(&Looper&, e.getMessage(), e);
return enqueueMessage(queue, msg, uptimeMillis);
}最终和handler.sendMessage一样,调用了sendMessageAtTime,然后调用了enqueueMessage方法,给msg.target赋值为handler,最终加入MessagQueue.可以看到,这里msg的callback和target都有值,那么会执行哪个呢?其实上面已经贴过代码,就是dispatchMessage方法: public void dispatchMessage(Message msg) {
if (msg.callback != null) {
handleCallback(msg);
if (mCallback != null) {
if (mCallback.handleMessage(msg)) {
handleMessage(msg);
}第2行,如果不为null,则执行callback回调,也就是我们的Runnable对象。好了,关于Looper , Handler , Message 这三者关系上面已经叙述的非常清楚了。最后来张图解:希望图片可以更好的帮助大家的记忆~~4、后话其实Handler不仅可以更新UI,你完全可以在一个子线程中去创建一个Handler,然后使用这个handler实例在任何其他线程中发送消息,最终处理消息的代码都会在你创建Handler实例的线程中运行。new Thread()
public void run()
Looper.prepare();
handler = new Handler()
public void handleMessage(android.os.Message msg)
Log.e(&TAG&,Thread.currentThread().getName());
Looper.loop();
Android不仅给我们提供了异步消息处理机制让我们更好的完成UI的更新,其实也为我们提供了异步消息处理机制代码的参考~~不仅能够知道原理,最好还可以将此设计用到其他的非Android项目中去~~最新补充:关于后记,有兄弟联系我说,到底可以在哪使用,见博客:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
积分:49685
积分:49685
排名:第62名
原创:202篇
评论:15006条
长期为您推荐优秀博文、开源项目、视频等,进入还有好玩的等着你,欢迎扫一扫。
请勿重复加群,Thx
文章:11篇
阅读:217110
文章:10篇
阅读:125096
文章:67篇
阅读:6145417

我要回帖

更多关于 炫舞为什么不能交往 的文章

 

随机推荐