谁知道UK、USA、Australia 、Canada 、France 、Italy 、New Zealand 、Japan的首都的英文拼写?
LondonWashington CanberraOttawaParisRomeWelingtonTokyo
Medley (Parts Of A Plague Of Lighthouse Keepers And The Sleepwalkers ) 歌词
歌曲名:Medley (Parts Of A Plague Of Lighthouse Keepers And The Sleepwalkers )歌手:Van Der Graaf Generator专辑:Godbluff爱你我管不了是祸未想过是为何能爱着你苦也未去躲有着我便有着你真爱是永不死穿过喜和悲跨过生和死see me flyi am singing in the sky假使我算神话因你创更愉快凭我彻底的勇气爱是最大权利不理场面不伟大我共你始终同游生死还有哪一种结尾花光一切在乎你没有想过太多我只需要你恋爱大过天想不想也日夜怀念连甜梦也不够甜怎么闪同学始终会遇见shall we talkshall we talk就当重新手拖手去上学堂我带着情意一丝丝凄怆许多说话都仍然未讲纵隔别遥远怀念对方悲伤盼换上再会祈望越问越伤心明明无余地再过问明明知道衷心一吻会有更亲厚质感我说过要你快乐让我担当失恋的主角改写了剧情无言地飘泊我想哭你可不可以暂时别要睡陪着我像最初相识我当时未怕累但如果但如果说下去或者我有说话未曾讲你这刹那在何方如何能联系上与你再相伴在旁如晨光太阳星辰即使变灰暗心中记忆一生照我心我的爱如潮水爱如潮水将我向你推紧紧跟随爱如潮水她将你我包围冷冷雨 wo...没焦点因找不到你冷冷雨低泣彷佛要等你经过答应我你从此不在深夜里徘徊不要轻易尝试放纵的滋味你可知道这样会让我心碎风继续吹不忍远离心里亦有泪不愿流泪望着你各种空虚冷冷冷吹起吹起风里梦过去的心火般灼热今天已变了冰冻来又如风离又如风或世事通通不过是场梦人在途中人在时空相识也许不过擦过梦中就算你壮阔胸膛不敌天气两鬓斑白都可认得你别离没有对错要走也解释不多现代说永远已经很傻随着那一宵去火花以消逝不可能付出一生那么多也许相爱很难就难在其实双方各有各寄望怎么办要单恋都难受太大的礼会内疚却也无力归还darling i want you你竟不知默默向风呆企去等心中戏子曾无限次欲话我知却也停止同是天涯沦落人在这伤心者通道上同行也许不必知道我是谁无谓令你令你令你令你令你令你令你令你令你令你令你令你令你令你令你令你令你如何可以不爱她莫非生命只配有一个他到了没法相处再去记它好处凭回忆制造这自欺的笑话随时日在远飞难舍弃每次看见冷冬到访的你那年冬天两心遇上没逃避可以笑的话不会哭可相知的心哪怕追逐可惜每次遇上热爱无法使我感觉我终于遇上幸福来忘掉错对来怀念过去曾共渡患难日子总有乐趣不相信会绝望不感觉到踌躇在美梦里竞争每日拼命进取世界将我包围誓死都一齐壮观得有如悬崖的婚礼也许生于世上无重要作为仍有这种真爱会留低祈求天地放过一双恋人怕发生的永远别发生从来未顺利遇上好景降临如何能重拾信心神啊救救我吧一把年纪了一个爱人都没有孤独是可怜的如果没爱我人生是黑白的僧人都不喜爱我神你不欢喜我迫我入了魔爱侣几百万谁料我蠢得竟可重覆去犯错吻下来豁出去这吻别似覆水再来也许要天上团聚眼泪还是留给天抚慰你是前度何必听我吠别再做情人做只猫做只狗不做情人做只宠物至少可爱迷人和你不瞅不睬最终只会成为敌人好心一早放开我好心一早放开我从头努力也坎坷通通不要好过来年岁月那么多为继续而继续没有好处还是我若注定有一点苦楚不如自己亲手割破谁得到过愿放手曾精彩过愿挽留年年月月逝去越是觉得深爱你http://music.baidu.com/song/2685225
Barbra Streisand的《Medley》 歌词
歌曲名:Medley歌手:Barbra Streisand专辑:Highlights From Just For The Record球迷奇遇记曲:李克勤/江港生/ARMATH 词:李克勤/DEJA J编:VINCENTLIARW起来 起来 起来 今晚大家不想去街起来 起来 起来 坐低又起身博命0益起来 起来 起来 睇波便睇0下波鞋起来 起来 起来 场场场面伟大脚脚脚法古怪 人人人浪最HIGH懒理你地有钱或或穷人 即使三更半夜无得(训)即使三个眼袋仍甘心还乐意在每晚发出这声音 0虑..0虑..睇波一家大细最兴奋过瘾在各自变0左对头人哈..哈..球迷来自远近 法国靓女吸引全情投入气氛护花使者曲:长谷川集平 词:潘伟源 编:Vincent Liauw这晚在街中偶遇心中的她两脚决定不听叫唤跟她归家深宵的冷风 不准吹向她她那幽幽眼神快要对我说话纤纤的身影 默默转来吧对我说浪漫情人爱我吗贪心的晚风 竟敢拥吻她将她秀发温温柔柔每缕缕放下卑污的晚风 不应抚慰她我已决意一生护着心中的她旧欢如梦曲:古曲 词:庞秋华 编:卢东尼当年相恋意中人 大家性情近早种爱根极亲蜜 心心相印互信任月底花间相偎依 共喜有缘份恩爱百般愿比翼 痴心一缕共订盟喜逢知己倍精神 内心快乐无憾朝晚眷恋共欢聚 天天相见互慰问立心栽花花不香 重反惹愁恨只怨爱海起风波 一朝生变断爱盟恩情如今化烟云 未许再续情份空有爱丝万千丈 可惜都已尽化恨枉抛相思枉痴恋 恨卿心太忍只有叹息旧欢似梦 早经消散莫再寻http://music.baidu.com/song/9174765
Candy (Medley) (1999 Digital Remaster) 歌词
歌曲名:Candy (Medley) (1999 Digital Remaster)歌手:Ella Fitzgerald专辑:30 By Ella「CANDY」作词∶Ken Hirai作曲∶Daisuke Sakurai歌∶平井坚Love me×4 I"m your candy 君は上目遣いで舌を出しているComing×4 I"m your cherryスコシ ヤラシイ ハゲシイ クルシイ ジェラシーNot me×4 Am I candy? 君は退屈そうに転がしているComing×4 I"m your cherryスコシ ヤラシイ ハゲシイ クルシイ ジェラシー口移しでくれたキャンディには 微量のアレが混じっていて胸を通る时に刺さった 棘みたいなものが取れない叶うモノと叶わないモノを 甘い顺に并べて君ならどっちから味わう? 人生という名のフルコースソッポ向いてる君だって 寂しがり屋なんだって 隙间见え隠れきっと 真実(ほんと)の恋なんて 妄想先走って イカせてすぐに yeahLove me×4 I"m your candy 君は含んだままで远くを见ているComing×4 I"m your cherryスコシ ヤラシイ ハゲシイ クルシイ ジェラシーNot me×4 Am I candy? 君は 音も立てずに味わっているComing×4 I"m your cherryスコシ ヤラシイ ハゲシイ クルシイ ジェラシーポケットの中熔けたキャンディは 歪な形に変形して胸にベタベタとへばりつく 掻きむしる程に切ないやっと裸になれたって 心はくるまって 轴がブレブレできっと真実(ほんと)の爱なんて 理想が舐めちゃって イカせて早く yeahLove me×4 I"m your candy 君は上目遣いで窥っているComing×4 I"m your cherryスコシ ヤラシイ ハゲシイ クルシイ ジェラシーNot me×4 Am I candy? 君はしかめっ面で呑み込んでいるComing×4 I"m your cherryスコシ ヤラシイ ハゲシイ クルシイ ジェラシー包み纸の中の甘い伤迹は 谁にも渡さない 仆だけが守るよLove me×4 I"m your candy 君は上目遣いで舌を出しているComing×4 I"m your cherryスコシ ヤラシイ ハゲシイ クルシイ ジェラシーNot me×4 Am I candy? 君は退屈そうに転がしているComing×4 I"m your cherryスコシ ヤラシイ ハゲシイ クルシイ ジェラシーLove me×4 I"m your candy 君は含んだままでこっちを见てるComing×4 I"m your cherryスコシ ヤラシイ ハゲシイ クルシイ ジェラシーNot me×4 Am I candy? 君は溢れるものを玩んでるComing×4 I"m your cherryスコシ ヤラシイ ハゲシイ クルシイ イトシイ【 おわり 】http://music.baidu.com/song/2872311
列举英文文献作者时and前面有逗号吗?
一般and前面不用逗号。
vbscript 中 两个数值 用and是什么意思
这里的 and 是按位与操作10 的二进制为 1010,3 的二进制为 0011,按位与得:10100011----00100010 即为二进制的2.按位与规则:1 and 1 = 11 and 0 = 00 and 1 = 00 and 0 = 0
Seongseok-dong, Ilsandong-gu, Goyang-si, Kyeonggi-do, Korea
ub300ud55cubbfcuad6d uacbduae30ub3c4 uace0uc591uc2dc uc0c1ub3d9uad6c uc131uc11dub3d9
android修改MTP及MTP(PC显示名称)、PTP盘符名、蓝牙名称
PTP修改: 路径:frameworksavmediamtpMtpServer.cpp MTP在PC端显示的名称: 路径:frameworksasemediajavaandroidmtpMtpDatabase.java 修改蓝牙名称: 路径:devicegenericcommonluetoothdroid_buildcfg.h 路径:devicemediatekcommoncustom.conf 路径:vendormediatekproprietaryframeworksasecustomcustom.conf
女生的英文名Joanna和Yolanda哪个好听,哪个印象比较好?
这是一个非常主观的问题,因为每个人的口味和印象都不同。但是,我可以告诉你这两个名字的含义和来源。Joanna是一个希伯来名字,意思是“上帝仁慈”。Yolanda是一个西班牙名字,意思是“紫色的花” 。希望这些信息能帮到你。
Pollution and pollut and polluted 三者的区别及用法
第一个是名词,意为污染.一般用作名词词组如:air pollution 空气污染. 第二个是动词,意为污染. 第三个是动词过去式,但是也作形容词使用如:polluted water 污染了的水. 有不明白的欢迎追问.
列出一些动物的英文名,例如大熊猫:panda!!!!急用!!!!!!!!!!!!!!!!!!!!!!!!!!!!
斑马: zebra 长颈鹿: giraffee 大象: elephant 虎: tiger 狮子: lion 猴子: monkey 狐狸: fox 袋鼠: kanagaroo 熊: bear 狼: wolf 鹿: deer 河马:hippopotamus 骆驼: camel 无尾熊: koala 臭鼬鼠: skunk 豹: leopard 黑豹: panther 猩猩: gorilla 浣熊: raccoon 犀牛: rhinoceros 狒狒: baboon 水獭: beaver 黑猩猩: chimpanzee 鬣狗: hyena 参考: mammals(picture dictionary) 蚂蚁= ant 雀仔=bird 蝴蝶=butterfly 毛虫=caterpillar 鸭=duck 大象=elephant 鱼=fish 青蛙=frog 长胫鹿=giraffe 山羊=goat 马=horse 狮子=lion 小猫=kitten 小羊=lamb 猴子=monkry 章鱼=octopus 小马=pony 兔子=rabbit 蜘蛛=spider 蛇=snake 蜗牛=snail 老虎=tiger 斑马=zebra 好努力想啦.....^o^希望有用啦 dog~狗 cat~猫 crocodile~鳄鱼 elephant~象 monkey~猴子 pig~猪 rhinoceros~犀牛 tiger~虎 cattle~牛 lion~狮子 hare/rabbit~兔子 peccary~野猪 参考: me cat dog monkey mouse pat lion tiger fox snake fish rabbit gold fish pig horse sheep bird leo hen duck cow dog cat rabbit panda snake pig mouse lion tiger 2007-04-28 11:22:08 补充: 仲有fish呀 参考: 老师教过啦
kathmandu nepal是什么国家
kathmandu nepal是【尼泊尔首都加德满都】。尼泊尔联邦民主共和国(英语:Federal Democratic Republic of Nepal),简称尼泊尔。南亚山区的内陆国,位于喜马拉雅山脉南麓(属青藏高原南底),北与中国相接,其余三面与印度为邻。喜玛拉雅山脉是中尼的天然国界,包括珠峰在内,世界十大高峰有八座在中尼边境。全国总面积14.7万平方公里,总人口约为2850万人。
android 如何让spinner第一次加载 禁止
Spinner在初始化时会自动调用一次OnItemSelectedListener事件原因:有人说是Bug,其实这与C#的事件机制类似,这个我也不懂。提供的解决办法:在事件注册之前调用
如何修改android spinner 弹出框的的位置
//新建数组适配器(ArrayAdapter) list:数据源ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list); //设置adapter设置下一列表样式 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Android怎么实现spinner的文本居中对齐
ArrayAdapter adapter = ArrayAdapter.createFromResource ( this , R.array. cities , R.layout. spinnerlayout ); spinnerlayout.xml 这样就可以居中显示了
android开发中,给Spinner中选项设置触发事件,实现不同Activity的跳转
/*实现到支付宝和银联界面的跳转并从两个界面传值*/public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener { Intent intent; private int requestCode; private Spinner sp; private String[] data; private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initData(); initView(); }/***处理组件的方法*/ private void initView() { tv = ((TextView) findViewById(R.id.tv)); //需要适配的View,是"v" sp = ((Spinner) findViewById(R.id.sp)); //接下来是创建MVC中的"c" controler ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data); sp.setAdapter(adapter); sp.setOnItemSelectedListener(this); } private void initData() {//初始化数据 data = new String[]{"请选择","支付宝","银联"}; }/**处理从银联和支付宝返回数据的方法*/ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (222==requestCode&&resultCode==999){ //说明是从银联页面返回了,读取intent携带的信息 int money=data.getIntExtra("money",0); tv.setText("付款金额:"+money+"元"); }else if (111==requestCode&&resultCode==888){ //说明是从支付宝页面返回了,读取intent携带的信息 int money=data.getIntExtra("money",0); int privilege=data.getIntExtra("privilege",0); tv.setText("付款金额:"+money+"元,优惠金额:"+privilege+"元"); } }/*spinner被点击事件的处理*/ @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { String str=sp.getSelectedItem().toString(); if ("支付宝".equals(str)){ intent=new Intent(this,ZhifubaoActivity.class); requestCode=111; }else if ("银联".equals(str)){ intent=new Intent(this,YinlianActivity.class); requestCode=222; }else { return; }//如果不需要跳转的页面返回值,下面可以直接用startActivity(intent); startActivityForResult(intent, requestCode); } @Override public void onNothingSelected(AdapterView<?> parent) { }}
如何更改android spinner 背景
你可以给Spinner的layout定义加个android:background属性,引用一张图片当背景或者用某种颜色当背景。
android 的spinner控件点击不能显示选中数据
这里是看不出什么问题的你的这段处理是在Activity的onCreate里面写的吗?我这里的示例代码String[] from = new String[] { "colorsData" }; int[] to = new int[] { android.R.id.text1 };Spinner spinner = (Spinner) findViewById(R.id.spinner); SimpleAdapter simpleAdapter = new SimpleAdapter(this, data, android.R.layout.simple_spinner_item, from, to); simpleAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(simpleAdapter); spinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { Toast.makeText( parent.getContext(), "Selected Color:- " + parent.getItemAtPosition(position), Toast.LENGTH_LONG).show(); } }); }
用Android Studio创建的Spinner无法使用entries
点击setting--》plugins--》找到“Android Support”选项,并勾选,然后会提示重启android studio ,点击重启,ok,如果已经设置好SDK的路径的话,问题解决,。
Android怎么实现spinner的文本居中对齐
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource ( this , R.array. cities , R.layout. spinnerlayout ); spinnerlayout.xml<?xml version = "1.0" encoding = "utf-8"?><TextView xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:gravity="center" />这样就可以居中显示了
如何将自定义图标 spinner 中android
一般都过自定义一个布局文件的方式重新设置一下:在你的 onItemSelected ( AdapterView 父, View view ,int 的位置,长的 id) 设置 view 为 null 与文本:((TextView)view).setText(null);然后,设置你想要通过的图标:spinner.setBackgroundDrawable(/* your icon drawable*/);风格上 xml 的 Spinner element 的高度与宽度适合于您的图标。
Android Spinner右边按钮如何设置为小三角
去WINDOWS组件看看
android Spinner控件 选择后为什么会自动弹到界面顶部
原生spinner太难看一般都自定义一个popupwindow更好看
android 中如何设置Spinner点击后弹出的下拉列表的宽度样式
//新建数组适配器(ArrayAdapter) list:数据源 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list); //设置adapter设置下一列表样式 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
android spinner下拉列表右侧箭头颜色怎么设置
自定义吧,没有直接设置颜色的很简单的东西,重写一下Adapter,然后自己对Adapter每个Item布局,在布局里面设置一下点击效果就行了。如:public class MainActivity extends Activity {private Spinner mSpinner;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}private void initView(){mSpinner = (Spinner)findViewById(R.id.spinner);MyAdapter adapter = new MyAdapter(getResources().getStringArray(R.array.girl_names));mSpinner.setAdapter(adapter);}private class MyAdapter extends BaseAdapter{private String[] idInt ;public MyAdapter(String[] idInt){this.idInt = idInt;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn idInt.length;}@Overridepublic Object getItem(int arg0) {// TODO Auto-generated method stubreturn idInt[arg0];}@Overridepublic long getItemId(int arg0) {// TODO Auto-generated method stubreturn 0;}@Overridepublic View getView(int arg0, View arg1, ViewGroup arg2) {// TODO Auto-generated method stubif(arg1 == null){arg1 = getLayoutInflater().inflate(R.layout.spinner_item, null);}TextView text = (TextView)arg1.findViewById(R.id.spinner_item_id);text.setText(idInt[arg0]);return arg1;}}spinner_item.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/text_selector"android:orientation="vertical" ><TextViewandroid:layout_margin="10dip"android:id="@+id/spinner_item_id"android:layout_width="match_parent"android:layout_height="wrap_content"android:textIsSelectable="true" ></TextView></LinearLayout>然后:text_selector.xml:<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android" ><item android:state_pressed="true" android:drawable="@android:color/black"></item><item android:state_pressed="false" android:drawable="@android:color/transparent"></item></selector>
Android中怎样设置Spinner显示的字体颜色
在layout中自定义spinner_item.xml,里面设置字体颜色大小等,然后代码中新建new ArrayAdapter<String>(this,R.layout.spinner_item);然后setAdapter(xx);即可
android Spinner如何设置边框
1、准备两张图片,并做好9.png2、在drawable中定义spinner_selector.xml<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_pressed="true" android:drawable="@drawable/spinner_press" /><!--按下时效果--> <item android:state_pressed="false" android:drawable="@drawable/spinner" /><!--默认效果--> </selector>3、style中定义 <!-- spinner --> <style name="spinner_style"> <item name="android:background">@drawable/spinner_selector</item> <item name="android:paddingLeft">5dip</item> </style>4、调用<Spinner android:id="@+id/field_item_spinner_content" style="@style/spinner_style" android:layout_width="fill_parent" android:layout_height="wrap_content" android:animationCache="true" android:drawSelectorOnTop="true" />5、在layout中定义simple_spinner_item.xml<?xml version="1.0" encoding="utf-8"?><CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" android:paddingLeft="5dip" android:paddingRight="5dip" android:gravity="center_vertical" android:textColor="#808080" android:singleLine="true" android:layout_width="fill_parent" android:layout_height="wrap_content" />6、java代码ArrayAdapter<String> adapter = new ArrayAdapter<String>(mContext, R.layout.simple_spinner_item);String level[] = getResources().getStringArray(R.array.affair_level);//资源文件for (int i = 0; i < level.length; i++) {adapter.add(level[i]);}adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);spinner.setAdapter(adapter);
android spinner默认什么都不选择
spinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { switch (position) { case 0: if(isFirstIn){ isFirstIn = false; }else{ Toast.makeText(PostDetail.this, "分享", Toast.LENGTH_SHORT).show(); } break;...懂了没,很简单的标记就可以了
android的spinner控件 怎么把选中值 返回到 自己创建的textview 里??
xiaotian0627说的不是默认,就是你选的。如果你的意思是选择的条目对应的数据那么就要用map
android Spinner如何获取被选中的值?
s1.getSelectedItem()).toString()
android 怎么获取spinner的值
1,获取选中值要通过spinner的setOnItemSelectedListener()事件来操作,根据spinner绑定值的方式的不一样,获取选中值的方式略有不同。2,如果没有用实体层绑定数据的话,诸如通过SimpleAdapter adapter = new SimpleAdapter(HRInputBase_Activity.this, items, R.layout.sp_item,new String[] { "text", "value" }, new int[] {R.id.sp_text, R.id.sp_value });sp_privince.setAdapter(adapter);这种方式绑定的。获取的方式为:TextView ProvinceTxt = (TextView) sp_privince.getSelectedView().findViewById(R.id.sp_value); // 得到选中的选项IdString codeString = ProvinceTxt.getText().toString();如果使用的是实体层的话,在setOnItemSelectedListener()事件中根据点击的索引值获取相对应的实体类,然后从实体类中获取对应得Code和Value值,相对来说,使用实体层更加的方便,代码整洁。3,两者都使用的是Adapter数据集的绑定,主要是考察对adapter的知识,可以对这方面多学习一点。
Android怎么实现spinner的文本居中对齐
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource ( this , R.array. cities , R.layout. spinnerlayout ); spinnerlayout.xml<?xml version = "1.0" encoding = "utf-8"?><TextView xmlns:android="http //schemas android com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:gravity="center" />这样就可以居中显示了
android开发中怎样获取spinner选中的内容?
1、获取选中值要通过spinner的setOnItemSelectedListener()事件来操作,根据spinner绑定值的方式的不一样,获取选中值的方式略有不同。2、如果没有用实体层绑定数据的话,诸如通过SimpleAdapter adapter = new SimpleAdapter(HRInputBase_Activity.this, items, R.layout.sp_item,new String[] { "text", "value" }, new int[] {R.id.sp_text, R.id.sp_value });sp_privince.setAdapter(adapter);这种方式绑定的。获取的方式为:TextView ProvinceTxt = (TextView) sp_privince.getSelectedView().findViewById(R.id.sp_value); // 得到选中的选项IdString codeString = ProvinceTxt.getText().toString();如果使用的是实体层的话,在setOnItemSelectedListener()事件中根据点击的索引值获取相对应的实体类,然后从实体类中获取对应得Code和Value值,相对来说,使用实体层更加的方便,代码整洁。3、两者都使用的是Adapter数据集的绑定,主要是考察对adapter的知识,可以对这方面多学习一点。
android开发中怎样获取spinner选中的内容?
千峰扣丁学堂Android 培训为您解答: 首先了解Spinner所用到的适配器相关的参数 AdapterView parent, 表示Spinner View view, 表示被选择的条目 int position, 表示数据的下标 long id 表示该条目在所有条目中的下标 一般来说 postion 和 id 都是相同的 理解了适配器相关的参数的意思,就很容易写出得到item的代码, public void onItemSelected(AdapterView parent, View view, int position, long id) { //知道那个条目被选择啦 //1 由于数据在view上可以直接从view里面获取 /* TextView tv_city = (TextView) view.findViewById(R.id.tv_city); String city = tv_city.getText().toString(); Toast.makeText(this, city, 1).show();*/ //2 知道数据的下标可以从数据里面直接获取 /* String city = citys[position]; Toast.makeText(this, city, 1).show();*/ //3 从Spinner身上直接获取 /* String city = (String) spinner.getSelectedItem(); Toast.makeText(this, city, 1).show();*/ //4 从adapter获取 String city = adapter.getItem(position); Toast.makeText(this, city, 1).show(); }
Android中怎样设置Spinner显示的字体颜色
-spinner.setOnItemSelectedListener(new OnItemSelectedListener(){ @Override public void onItemSelected(AdapterView parent, View view, int position, long id){ curyid = position; //showPrice(position); TextView tv = (TextView)view; tv.setTextColor(getResources().getColor(R.color.white)); //设置颜色 tv.setTextSize(12.0f); //设置大小 tv.setGravity(android.view.Gravity.CENTER_HORIZONTAL); //设置居中 } @Override public void onNothingSelected(AdapterView parent){} });
Android中怎样设置Spinner显示的字体颜色
1、在layout中自定义spinner_item.xml,里面设置字体颜色大小等,然后代码中新建newArrayAdapter<String>(this,R.layout.spinner_item);然后setAdapter(xx); 2、自定义一个布局文件spinner_item.xml,这个就是spinner每一项的样式,一般是TextView,当然也可以是其他控件 3、也可以监听listview点击事件,在里面改变颜色,
android开发中怎样获取spinner选中的内容
1,获取选中值要通过spinner的setOnItemSelectedListener()事件来操作,根据spinner绑定值的方式的不一样,获取选中值的方式略有不同。2,如果没有用实体层绑定数据的话,诸如通过SimpleAdapter adapter = new SimpleAdapter(HRInputBase_Activity.this, items, R.layout.sp_item,new String[] { "text", "value" }, new int[] {R.id.sp_text, R.id.sp_value });sp_privince.setAdapter(adapter);这种方式绑定的。获取的方式为:TextView ProvinceTxt = (TextView) sp_privince.getSelectedView().findViewById(R.id.sp_value); // 得到选中的选项IdString codeString = ProvinceTxt.getText().toString();如果使用的是实体层的话,在setOnItemSelectedListener()事件中根据点击的索引值获取相对应的实体类,然后从实体类中获取对应得Code和Value值,相对来说,使用实体层更加的方便,代码整洁。3,两者都使用的是Adapter数据集的绑定,主要是考察对adapter的知识,可以对这方面多学习一点。
《you and me unkown》的中英文歌词。
you and me song---The WannadiesAlways when we fight当我们吵架的时候I try to make you laugh我总是试图逗你笑Til everything"s forgotten直到你忘记了这一切I know you hate that我知道你讨厌那样ba da da ba ba ba ba (2x)Always when we fight总是在我们吵架的时候I kiss you once or twice我会亲你一两次And everything"s forgotten所有的一切就都忘记了I know you hate that我知道你讨厌那样I love you Sunday song我爱你 周日之歌The week"s not yet begun一周还没有开始呢And everything is quiet一切都是那么安静And it"s always...总是….You and me always, and forever你和我总是在一起 永远在一起You and me always, and forever ba ba ba ba da ba, it was always总是…..You and me always..你和我总是….You tell me I"m a real man你说我是一个真正的男人and try to look impressed试图想要看起来给人留下深刻的印象Not very convincing不是那么让人信服But you know I love it但是你知道我喜欢这样子Now we watch TV现在我们在看电视"Til we fall asleep直到我们睡着Not very exciting不是那么兴奋But it"s you and...但是是你和Me and we"ll always be together我 我们总是在一起You and me always, and forever你和我总是在一起 永远在一起ba ba ba ba da ba, it was always总是…..You and me always, and forever你和我总是在一起 永远在一起You and me always, and foreverba ba ba ba da ba, it was always...You and me always, and foreverYou and me always, and foreverba ba ba ba da ba ba....ba ra ra
《you and me unkown》的中英文歌词。
you and me song---The WannadiesAlways when we fight当我们吵架的时候I try to make you laugh我总是试图逗你笑Til everything"s forgotten直到你忘记了这一切I know you hate that我知道你讨厌那样ba da da ba ba ba ba (2x)Always when we fight总是在我们吵架的时候I kiss you once or twice我会亲你一两次And everything"s forgotten所有的一切就都忘记了I know you hate that我知道你讨厌那样I love you Sunday song我爱你 周日之歌The week"s not yet begun一周还没有开始呢And everything is quiet一切都是那么安静And it"s always...总是….You and me always, and forever你和我总是在一起 永远在一起You and me always, and forever ba ba ba ba da ba, it was always总是…..You and me always..你和我总是….You tell me I"m a real man你说我是一个真正的男人and try to look impressed试图想要看起来给人留下深刻的印象Not very convincing不是那么让人信服But you know I love it但是你知道我喜欢这样子Now we watch TV现在我们在看电视"Til we fall asleep直到我们睡着Not very exciting不是那么兴奋But it"s you and...但是是你和Me and we"ll always be together我 我们总是在一起You and me always, and forever你和我总是在一起 永远在一起ba ba ba ba da ba, it was always总是…..You and me always, and forever你和我总是在一起 永远在一起You and me always, and foreverba ba ba ba da ba, it was always...You and me always, and foreverYou and me always, and foreverba ba ba ba da ba ba....ba ra ra
open and squash什么意思
open and squash开放和南瓜
At six and seven 是什么意思
atsixandseven的话就是六点和七点了你如果想问的是俚语atsixesandsevens的话,就是乱七八糟的意思英文解释:inastateofconfusionordisorder.
at six and seven 什么意思
七上八下乱七八糟
at sixes and sevens是什么意思?
这句英文的意思是乱七八糟,这句英语非常的简单,而且用的语法也是简单易懂,而且它的一些形容也比较突出。
老人留下的一把吃饭勺子 后面写着《MADE IN england》英文应该是英国字样。谁知道是时期的勺子
wa哇.....................................................................
懂葡萄牙语的进~~~VEM CA和ANDA CA的区别。VEM CA是命令式还是请求式,比如尊敬词样的
Anda Ca 的用法是口语而并不正确,正确需要中间加para。 两个都是命令式。 葡语请求式也较尊称命令式,由第一人称陈述式现在时变化而成。两者分别写为请求式为Venha ca 和 Ande para ca.两者区别不大,一个是过来,一个强调走过来
They+walked+and+laughed中walked做什么成分?
那些笑着从他身边经过的人把他们的健康看成是理所当然的事情,他自己过去也是这么想的。take .... for granted 认为......理所当然
laughedandlaughed什么意思?
laughedandlaughed中文翻译的意思是:大笑
when i am down and oh my soul so weary的歌词?
when i am down and, oh my soul so weary「当我失落的时候噢我的灵魂感到多么的疲倦」when troubles come and my heart burdened be「当有困难时我的心背负着重担」then, i am still and wait here in the silence「然后我会在寂静中等待」until you come and sit awhile with me「直到你的到来并与我小坐片刻」you raise me up, so i can stand on mountains「你鼓舞了我所以我能站在群山顶端」you raise me up, to walk on stormy seas「你鼓舞了我让我能走过狂风暴雨的海」i am strong, when i am on your shoulders「当我靠在你的肩上时我是坚强的」you raise me up… to more than i can be「你鼓舞了我…让我能够超越极限」there is no life - no life without its hunger「没有生命-没有生命是没有渴求的」each restless heart beats so imperfectly「每颗火热跳动的心都不完美」but when you come and i am filled with wonder「但是当你靠近时我的心充满了惊讶」sometimes, i think i glimpse eternity「有时我觉得我见到了永恒」you raise me up, so i can stand on mountains「你鼓舞了我所以我能站在群山顶端」you raise me up, to walk on stormy seas「你鼓舞了我让我能走过狂风暴雨的海」i am strong, when i am on your shoulders「当我靠在你的肩上时我是坚强的」you raise me up… to more than i can be「你鼓舞了我…让我能够超越极限」you raise me up, so i can stand on mountains「你鼓舞了我所以我能站在群山顶端」you raise me up, to walk on stormy seas「你鼓舞了我让我能走过狂风暴雨的海」i am strong, when i am on your shoulders「当我靠在你的肩上时我是坚强的」you raise me up… to more than i can be「你鼓舞了我…让我能够超越极限」you raise me up, so i can stand on mountains「你鼓舞了我所以我能站在群山顶端」you raise me up, to walk on stormy seas「你鼓舞了我让我能走过狂风暴雨的海」i am strong, when i am on your shoulders「当我靠在你的肩上时我是坚强的」you raise me up… to more than i can be「你鼓舞了我…让我能够超越极限」you raise me up… to more than i can be…「你鼓舞了我…让我能够超越极限…」
如何关闭android中的HandlerThread
android 中的HandlerThread包含了android中的消息处理机制必须的looper,当你启动这个线程的时候,就会闯进looper,并开启消息处理的循环。跟其它线程一样,HandlerThread是可不可以直接stop掉的,不过经过本人测试,你可以调用:getLooper().quit();来退出这个线程,其实原理很简单,就是改变在消息循环里面标志位,退出整个while循环,使线程执行完毕。 部分 测试代码如下:public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);tv_name = (TextView) findViewById(R.id.tv_name);btn_name = (Button) findViewById(R.id.btn_name);Log.i(TAG, "==================main thread:" + Thread.currentThread().getName());final HandlerThread thread = new HandlerThread("handlerThread");thread.start();final MyHandler handler = new MyHandler(thread.getLooper());btn_name.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {handler.sendEmptyMessage(1);try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}thread.getLooper().quit();}});}class MyHandler extends Handler {public MyHandler(Looper looper) {super(looper);}@Overridepublic void handleMessage(Message msg) {Log.i(TAG, "==================" + Thread.currentThread().getName());//tv_name.setText("hello, this is the first message from handler");不过要注意:要想更新界面内容,还是需要使用界面的Looper,不然的话还是会抛错误,还是那句话,所有跟改变界关的操作,都得通过界面的Looper来执行
Handler.post()问题
子线程中不能用操作主线程,你looper准备后还需要在队列最后调用looper.loop()才行,最好的方法是你new handler的时候给handler的参数用looper.getMainlooper()就好了
Android中的线程怎么获取主线程
使用Looper判断,方法为: Looper.myLooper() != Looper.getMainLooper()使用线程句柄判断,将主线程的Thread.currentThread()获取到主线程当前句柄,保存起来,在需要判断的时候调用Thread.currentThread()来与之比较,即可判断当前线程是否是主线程了
android面试题会出现什么内容
1.android dvm 的进程和Linux的进程,应用程序的进程是否为同一个概念:答:dvm是dalivk虚拟机。每一个android应用程序都在自己的进程中运行,都拥有一个dalivk虚拟机实例。而每一个dvm都是在linux的一个进程。所以说可以认为是同一个概念。2.android的动画有哪几种?他们的特点和区别是什么?答:两种,一种是tween动画,一种是frame动画。tween动画,这种实现方式可以使视图组件移动,放大或缩小以及产生透明度的变化。frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。3.handler进制的原理:答:android提供了handler和looper来满足线程间的通信。Handler先进先出原则。looper用来管理特定线程内对象之间的消息交换(message Exchange).1)looper:一个线程可以产生一个looper对象,由它来管理此线程里的message queue(消息队列)2)handler:你可以构造一个handler对象来与looper沟通,以便push新消息到messagequeue里;或者接收looper(从messagequeue里取出)所送来的消息。3)messagequeue:用来存放线程放入的消息。4)线程:UI thread 通常就是main thread,而android启动程序时会为它建立一个message queue.4.android view的刷新:答:Android中对View的更新有很多种方式,使用时要区分不同的应用场合。我感觉最要紧的是分清:多线程和双缓冲的使用情况。1).不使用多线程和双缓冲这种情况最简单了,一般只是希望在View发生改变时对UI进行重绘。你只需在Activity中显式地调用View对象中的invalidate()方法即可。系统会自动调用 View的onDraw()方法。2).使用多线程和不使用双缓冲这种情况需要开启新的线程,新开的线程就不好访问View对象了。强行访问的话会报:android.view.ViewRoot$CalledFromWrongThreadException:Only the originalthread that created a view hierarchy can touch its views.这时候你需要创建一个继承了android.os.Handler的子类,并重写handleMessage(Messagemsg)方法。android.os.Handler是能发送和处理消息的,你需要在Activity中发出更新UI的消息,然后再你的Handler(可以使用匿名内部类)中处理消息(因为匿名内部类可以访问父类变量,你可以直接调用View对象中的invalidate()方法 )。也就是说:在新线程创建并发送一个Message,然后再主线程中捕获、处理该消息。3).使用多线程和双缓冲Android中SurfaceView是View的子类,她同时也实现了双缓冲。你可以定义一个她的子类并实现SurfaceHolder.Callback接口。由于实现SurfaceHolder.Callback接口,新线程就不需要android.os.Handler帮忙了。SurfaceHolder中lockCanvas()方法可以锁定画布,绘制玩新的图像后调用unlockCanvasAndPost(canvas)解锁(显示),还是比较方便得。5.说说mvc模式的原理,它在android中的运用:答:android的官方建议应用程序的开发采用mvc模式。何谓mvc?mvc是model,view,controller的缩写,mvc包含三个部分:l模型(model)对象:是应用程序的主体部分,所有的业务逻辑都应该写在该层。2视图(view)对象:是应用程序中负责生成用户界面的部分。也是在整个mvc架构中用户唯一可以看到的一层,接收用户的输入,显示处理结果。3控制器(control)对象:是根据用户的输入,控制用户界面数据显示及更新model对象状态的部分,控制器更重要的一种导航功能,想用用户出发的相关事件,交给m哦得了处理。android鼓励弱耦合和组件的重用,在android中mvc的具体体现如下:1)视图层(view):一般采用xml文件进行界面的描述,使用的时候可以非常方便的引入,当然,如何你对android了解的比较的多了话,就一定 可以想到在android中也可以使用javascript+html等的方式作为view层,当然这里需要进行java和javascript之间的通 信,幸运的是,android提供了它们之间非常方便的通信实现。2)控制层(controller):android的控制层的重 任通常落在了众多的acitvity的肩上,这句话也就暗含了不要在acitivity中写代码,要通过activity交割model业务逻辑层处理, 这样做的另外一个原因是android中的acitivity的响应时间是5s,如果耗时的操作放在这里,程序就很容易被回收掉。3)模型层(model):对数据库的操作、对网络等的操作都应该在model里面处理,当然对业务计算等操作也是必须放在的该层的。6.Activity的生命周期:答:onCreate: 在这里创建界面,做一些数据 的初始化工作onStart: 到这一步变成用户可见不可交互的onResume:变成和用户可交互 的,(在activity 栈系统通过栈的方式管理这些个Activity的最上面,运行完弹出栈,则回到上一个Activity)onPause: 到这一步是可见但不可交互的,系统会停止动画 等消耗CPU 的事情从上文的描述已经知道,应该在这里保存你的一些数据,因为这个时候你的程序的优先级降低,有可能被系统收回。在这里保存的数据,应该在onstop: 变得不可见,被下一个activity覆盖了onDestroy: 这是activity被干掉前最后一个被调用方法了,可能是外面类调用finish方法或者是系统为了节省空间将它暂时性的干掉7.让Activity变成一个窗口:答:Activity属性设定:有时候会做个应用程序是漂浮在手机主界面的。这个只需要在设置下Activity的主题theme,即在Manifest.xml定义Activity的地方加一句:android :theme="@android:style/Theme.Dialog"如果是作半透明的效果:android:theme="@android:style/Theme.Translucent"8.Android中常用的五种布局:答:LinearLayout线性布局;AbsoluteLayout绝对布局;TableLayout表格布局;RelativeLayout相对布局;FrameLayout帧布局;9.Android的五种数据存储方式:答:sharedPreferences;文件;SQLite;contentProvider;网络附上出处链接:http://www.51edu.com/it/bckf/36635.html
android中handle在内部类中为什么不执行
当Android应用启动的时候,会先创建一个应用主线程的Looper对象,Looper实现了一个简单的消息队列,一个一个的处理里面的Message对象。主线程Looper对象在整个应用生命周期中存在。当在主线程中初始化Handler时,该Handler和Looper的消息队列关联。发送到消息队列的Message会引用发送该消息的Handler对象,这样系统可以调用 Handler#handleMessage(Message) 来分发处理该消息。在Java中,非静态(匿名)内部类会引用外部类对象。而静态内部类不会引用外部类对象。如果外部类是Activity,则会引起Activity泄露 。当Activity finish后,延时消息会继续存在主线程消息队列中1分钟,然后处理消息。而该消息引用了Activity的Handler对象,然后这个Handler又引用了这个Activity。这些引用对象会保持到该消息被处理完,这样就导致该Activity对象无法被回收,从而导致了上面说的 Activity泄露。要修改该问题,只需要按照Lint提示的那样,把Handler类定义为静态即可,然后通过WeakReference 来保持外部的Activity对象。
android启动后怎么查看其里面的进程和线程
1)一个 Android 程序开始运行时,会单独启动一个Process。默认情况下,所有这个程序中的Activity或者Service都会跑在这个Process。默认情况下,一个Android程序也只有一个Process,但一个Process下却可以有许多个Thread。2)一个 Android 程序开始运行时,就有一个主线程Main Thread被创建。该线程主要负责UI界面的显示、更新和控件交互,所以又叫UI Thread。3)一个Android程序创建之初,一个Process呈现的是单线程模型--即MainThread,所有的任务都在一个线程中运行,所以,MainThread所调用的每一个函数,其耗时应该越短越好,而对于比较耗时的工作,应该交给子线程去做,以避免主线程(UI线程)被阻塞,导致程序出现ANR(Application not response)一个Activity就运行在一个线程中吗?或者编码时,如果不是明确安排在不同线程中的两个Activity,其就都是在同一个线程中?那从一个Activity跳转到另一个Activity时,是不是跳出的那个Activity就处在睡眠状态了?【答】 每个Activity都有一个Process属性,可以指定该Activity是属于哪个进程的。当然如果不明确指明,应该就是从属于默认进程(Application指定的,如其未指定,应该就是默认主进程)。Android中有Task的概念,而同一个Task的各个Activity会形成一个栈,只有站定的Activity才有机会与用户交互。原文地址:Android中的进程与线程 原文作者:江鹏当应用程序的组件第一次运行时,Android将启动一个只有一个执行线程的Linux进程。默认,应用程序所有的组件运行在这个进程和线程中。然而,你可以安排组件运行在其他进程中,且你可以为进程衍生出其它线程。本文从下面几点来介绍Android的进程与线程:1、进程组件运行于哪个进程中由清单文件控制。组件元素——<activity>、<service>、<receiver>、<provider>,都有一个process属性可以指定组件运行在哪个进程中。这个属性可以设置为每个组件运行在自己的进程中,或者某些组件共享一个进程而其他的不共享。他们还可以设置为不同应用程序的组件运行在同一个进程中——假设这些应用程序共享同一个Linux用户ID且被分配了同样的权限。<application>元素也有process属性,为所有的组件设置一个默认值。所有的组件都在特定进程的主线程中实例化,且系统调用组件是由主线程派遣。不会为每个实例创建单独的线程,因此,对应这些调用的方法——诸如View.onKeyDown()报告用用户的行为和生命周期通知,总是运行在进程的主线程中。这意味着,没有组件当被系统调用时应该执行很长时间或阻塞操作(如网络操作或循环计算),因为这将阻塞进程中的其它组件。你可以为长操作衍生独立的线程。public boolean onKeyDown(int keyCode,KeyEvent event):默认实现KeyEvent.Callback.onKeyMultiple(),当按下视图的KEYCODE_DPAD_CENTER或KEYCODE_ENTER然后释放时执行,如果视图可用且可点击。参数keyCode-表示按钮被按下的键码,来自KeyEvent event-定义了按钮动作的KeyEvent对象返回值如果你处理事件,返回true;如果你想下一个接收者处理事件,返回false。当内存剩余较小且其它进程请求较大内存并需要立即分配,Android要回收某些进程,进程中的应用程序组件会被销毁。当他们再次运行时,会重新开始一个进程。当决定终结哪个进程时,Android会权衡他们对用户重要性的相对权值。例如,与运行在屏幕可见的活动进程相比(前台进程),它更容易关闭一个进程,它的活动在屏幕是不可见(后台进程)。决定是否终结进程,取决于运行在进程中的组件状态。关于组件的状态,将在后面一篇——组件生命周期中介绍。2、线程虽然你可能会将你的应用程序限制在一个进程中,但有时候你会需要衍生一个线程做一些后台工作。因为用户界面必须很快地响应用户的操作,所以活动寄宿的线程不应该做一些耗时的操作如网络下载。任何不可能在短时间完成的操作应该分配到别的线程。线程在代码中是用标准的Java线程对象创建的,Android提供了一些方便的类来管理线程——Looper用于在线程中运行消息循环、Handler用户处理消息、HandlerThread用户设置一个消息循环的线程。Looper类该类用户在线程中运行消息循环。线程默认没有消息循环,可以在线程中调用prepare()创建一个运行循环;然后调用loop()处理消息直到循环结束。大部分消息循环交互是通过Handler类。下面是一个典型的执行一个Looper线程的例子,分别使用prepare()和loop()创建一个初始的Handler与Looper交互: 1. Android中进程与进程、线程与线程之间如何通信?1)一个 Android 程序开始运行时,会单独启动一个Process。默认情况下,所有这个程序中的Activity或者Service都会跑在这个Process。默认情况下,一个Android程序也只有一个Process,但一个Process下却可以有许多个Thread。2)一个 Android 程序开始运行时,就有一个主线程Main Thread被创建。该线程主要负责UI界面的显示、更新和控件交互,所以又叫UI Thread。3)一个Android程序创建之初,一个Process呈现的是单线程模型--即MainThread,所有的任务都在一个线程中运行,所以,MainThread所调用的每一个函数,其耗时应该越短越好,而对于比较耗时的工作,应该交给子线程去做,以避免主线程(UI线程)被阻塞,导致程序出现ANR(Application not response)一个Activity就运行在一个线程中吗?或者编码时,如果不是明确安排在不同线程中的两个Activity,其就都是在同一个线程中?那从一个Activity跳转到另一个Activity时,是不是跳出的那个Activity就处在睡眠状态了?【答】 每个Activity都有一个Process属性,可以指定该Activity是属于哪个进程的。当然如果不明确指明,应该就是从属于默认进程(Application指定的,如其未指定,应该就是默认主进程)。Android中有Task的概念,而同一个Task的各个Activity会形成一个栈,只有站定的Activity才有机会与用户交互。原文地址:Android中的进程与线程 原文作者:江鹏当应用程序的组件第一次运行时,Android将启动一个只有一个执行线程的Linux进程。默认,应用程序所有的组件运行在这个进程和线程中。然而,你可以安排组件运行在其他进程中,且你可以为进程衍生出其它线程。本文从下面几点来介绍Android的进程与线程:1、进程组件运行于哪个进程中由清单文件控制。组件元素——<activity>、<service>、<receiver>、<provider>,都有一个process属性可以指定组件运行在哪个进程中。这个属性可以设置为每个组件运行在自己的进程中,或者某些组件共享一个进程而其他的不共享。他们还可以设置为不同应用程序的组件运行在同一个进程中——假设这些应用程序共享同一个Linux用户ID且被分配了同样的权限。<application>元素也有process属性,为所有的组件设置一个默认值。所有的组件都在特定进程的主线程中实例化,且系统调用组件是由主线程派遣。不会为每个实例创建单独的线程,因此,对应这些调用的方法——诸如View.onKeyDown()报告用用户的行为和生命周期通知,总是运行在进程的主线程中。这意味着,没有组件当被系统调用时应该执行很长时间或阻塞操作(如网络操作或循环计算),因为这将阻塞进程中的其它组件。你可以为长操作衍生独立的线程。public boolean onKeyDown(int keyCode,KeyEvent event):默认实现KeyEvent.Callback.onKeyMultiple(),当按下视图的KEYCODE_DPAD_CENTER或KEYCODE_ENTER然后释放时执行,如果视图可用且可点击。参数keyCode-表示按钮被按下的键码,来自KeyEvent event-定义了按钮动作的KeyEvent对象返回值如果你处理事件,返回true;如果你想下一个接收者处理事件,返回false。当内存剩余较小且其它进程请求较大内存并需要立即分配,Android要回收某些进程,进程中的应用程序组件会被销毁。当他们再次运行时,会重新开始一个进程。当决定终结哪个进程时,Android会权衡他们对用户重要性的相对权值。例如,与运行在屏幕可见的活动进程相比(前台进程),它更容易关闭一个进程,它的活动在屏幕是不可见(后台进程)。决定是否终结进程,取决于运行在进程中的组件状态。关于组件的状态,将在后面一篇——组件生命周期中介绍。2、线程虽然你可能会将你的应用程序限制在一个进程中,但有时候你会需要衍生一个线程做一些后台工作。因为用户界面必须很快地响应用户的操作,所以活动寄宿的线程不应该做一些耗时的操作如网络下载。任何不可能在短时间完成的操作应该分配到别的线程。线程在代码中是用标准的Java线程对象创建的,Android提供了一些方便的类来管理线程——Looper用于在线程中运行消息循环、Handler用户处理消息、HandlerThread用户设置一个消息循环的线程。Looper类该类用户在线程中运行消息循环。线程默认没有消息循环,可以在线程中调用prepare()创建一个运行循环;然后调用loop()处理消息直到循环结束。大部分消息循环交互是通过Handler类。下面是一个典型的执行一个Looper线程的例子,分别使用prepare()和loop()创建一个初始的Handler与Looper交互: 2.1、远程过程调用(Remote procedure calls,RPCs)Android有一个轻量级的远程过程调用机制——方法在本地调用却在远程(另外一个进程中)执行,结果返回给调用者。这需要将方法调用和它伴随的数据分解为操作系统能够理解的层次,从本地进程和地址空间传输到远程进程和地址空间,并重新组装调用。返回值以相反方向传输。Android提供了做这些工作的所有代码,这样我们可以专注于定义和执行RPC接口本身。一个RPC接口仅包含方法。所有的方法同步地执行(本地方法阻塞直到远程方法执行完成),即使是没有返回值。简言之,该机制工作原理如下:首先,你用简单的IDL(interface definition language,接口定义语言)声明一个你想实现的RPC接口。从这个声明中,aidl工具生成一个Java接口定义,提供给本地和远程进程。它包含两个内部类,如下图所示:内部类有管理你用IDL定义的接口的远程过程调用所需要的所有代码。这两个内部类都实现了IBinder接口。其中之一就是在本地由系统内部使用,你写代码可以忽略它。另外一个是Stub,扩展自Binder类。除了用于有效地IPC(interprocess communication)调用的内部代码,内部类在RPC接口声明中还包含方法声明。你可以定义Stub的子类实现这些方法,如图中所示。通常情况下,远程过程有一个服务管理(因为服务能通知系统关于进程和它连接的其它进程的信息)。它有由aidl工具生成的接口文件和Stub子类实现的RPC方法。服务的客户端仅有由aidl工具生成的接口文件。下面介绍服务如何与它的客户端建立连接:· 服务的客户端(在本地端的)应该实现onServiceConnected() 和onServiceDisconnected() 方法,因此当与远程服务建立连接成功和断开连接是会通知它。然后调用bindService() 建立连接。 · 服务的onBind()方法将实现为接受或拒绝连接,者取决于它接受到的意图(该意图传送到binServive())。如果连接被接受,它返回一个Stub子类的实例。 · 如果服务接受连接,Android调用客户端的onServiceConnected()方法且传递给它一个IBinder对象,返回由服务管理的Stub子类的一个代理。通过代理,客户端可以调用远程服务。 这里只是简单地描述,省略了一些RPC机制的细节。你可以查阅相关资料或继续关注Android开发之旅,后面将为你奉上。2.2、线程安全方法在一些情况下,你实现的方法可能会被不止一个线程调用,因此必须写成线程安全的。这对远程调用方法是正确的——如上一节讨论的RPC机制。当从IBinder进程中调用一个IBinder对象中实现的一个方法,这个方法在调用者的线程中执行。然而,当从别的进程中调用,方法将在Android维护的IBinder进程中的线程池中选择一个执行,它不在进程的主线程中执行。例如,一个服务的onBind()方法在服务进程的主线程中被调用,在onBind()返回的对象中执行的方法(例如,实现RPC方法的Stub子类)将在线程池中被调用。由于服务可以有一个以上的客户端,所以同时可以有一个以上的线程在执行同一个IBinder方法。因此,IBinder的方法必须是线程安全的。同样,一个内容提供者可以接受其它进程产生的数据请求。虽然ContentResolver 和 ContentProvider 类隐藏进程通信如何管理的,对应哪些请求的ContentResolver 方法——query()、insert()、delete()、update()、getType(),在内容提供者的进程的线程池中被调用,而不是在这一进程的主线程中。因为这些方法可以同时从任意数量的线程中调用,他们也必须实现为线程安全的。
HandleThread的用法
什么是HandleThread呢? 这个类的作用是创建一个包含looper的线程。 什么时候使用到它呢? 加入在应用程序当中为了实现同时完成多个任务,所以我们会在应用程序当中创建多个线程。为了让多个线程之间能够方便的通信,我们会使用Handler实现线程间的通信。这个时候我们手动实现的多线程+Handler的简化版就是我们HandlerThrea所要做的事了。 HandleThread的基本用法: 首先创建一个HandleThread: HandlerThread mHandlerThread = new HandlerThread("myHandlerThreand"); mHandlerThread.start();//调用run方法 其次: 通过HandleThread的Lopper来创建Handle final Handler mHandler = new Handler(mHandlerThread.getLooper()) { @Override public void handleMessage(Message msg) { Log.i("tag", "接收到消息:" + msg.obj.toString()); } }; 然后就可以使用了: mHandler.sendMessage(msg); 最后在不需要再用的时候记得手动收回: protected void onDestroy() { super.onDestroy(); mHandlerThread.quit(); //quitSafely();可以用这个 } 分析: 可以看出HandleThread的本质其实就是一个Thread.内部自己维护了一个消息队列和一个Looper; 总结: HandlerThread本质上是一个Thread对象,只不过其内部帮我们创建了该线程的Looper和MessageQueue; 通过HandlerThread我们不但可以实现UI线程与子线程的通信同样也可以实现子线程与子线程之间的通信; HandlerThread在不需要使用的时候需要手动的回收掉;
Android 中的“子线程”解析
Android 中线程可分为 主线程 和 子线程 两类,其中主线程也就是 UI线程 ,它的主要这作用就是运行四大组件、处理界面交互。子线程则主要是处理耗时任务,也是我们要重点分析的。 首先 Java 中的各种线程在 Android 里是通用的,Android 特有的线程形态也是基于 Java 的实现的,所以有必要先简单的了解下 Java 中的线程,本文主要包括以下内容: 在 Java 中要创建子线程可以直接继承 Thread 类,重写 run() 方法: 或者实现 Runnable 接口,然后用Thread执行Runnable,这种方式比较常用: 简单的总结下: Callable 和 Runnable 类似,都可以用来处理具体的耗时任务逻辑的,但是但具体的差别在哪里呢?看一个小例子: 定义 MyCallable 实现了 Callable 接口,和之前 Runnable 的 run() 方法对比下, call() 方法是有返回值的哦,泛型就是返回值的类型: 一般会通过线程池来执行 Callable (线程池相关内容后边会讲到),执行结果就是一个 Future 对象: 可以看到,通过线程池执行 MyCallable 对象返回了一个 Future 对象,取出执行结果。 Future 是一个接口,从其内部的方法可以看出它提供了取消任务(有坑!!!)、判断任务是否完成、获取任务结果的功能: Future 接口有一个 FutureTask 实现类,同时 FutureTask 也实现了 Runnable 接口,并提供了两个构造函数: 用 FutureTask 一个参数的构造函数来改造下上边的例子: FutureTask 内部有一个 done() 方法,代表 Callable 中的任务已经结束,可以用来获取执行结果: 所以 Future + Callable 的组合可以更方便的获取子线程任务的执行结果,更好的控制任务的执行,主要的用法先说这么多了,其实 AsyncTask 内部也是类似的实现! 注意, Future 并不能取消掉运行中的任务,这点在后边的 AsyncTask 解析中有提到。 Java 中线程池的具体的实现类是 ThreadPoolExecutor ,继承了 Executor 接口,这些线程池在 Android 中也是通用的。使用线程池的好处: 常用的构造函数如下: 一个常规线程池可以按照如下方式来实现: 执行任务: 基于 ThreadPoolExecutor ,系统扩展了几类具有新特性的线程池: 线程池可以通过 execute() 、 submit() 方法开始执行任务,主要差别从方法的声明就可以看出,由于 submit() 有返回值,可以方便得到任务的执行结果: 要关闭线程池可以使用如下方法: IntentService 是 Android 中一种特殊的 Service,可用于执行后台耗时任务,任务结束时会自动停止,由于属于系统的四大组件之一,相比一般线程具有较高的优先级,不容易被杀死。用法和普通 Service 基本一致,只需要在 onHandleIntent() 中处理耗时任务即可: 至于 HandlerThread,它是 IntentService 内部实现的重要部分,细节内容会在 IntentService 源码中说到。 IntentService 首次创建被启动的时候其生命周期方法 onCreate() 会先被调用,所以我们从这个方法开始分析: 这里出现了 HandlerThread 和 ServiceHandler 两个类,先搞明白它们的作用,以便后续的分析。 首先看 HandlerThread 的核心实现: 首先它继承了 Thread 类,可以当做子线程来使用,并在 run() 方法中创建了一个消息循环系统、开启消息循环。 ServiceHandler 是 IntentService 的内部类,继承了 Handler,具体内容后续分析: 现在回过头来看 onCreate() 方法主要是一些初始化的操作, 首先创建了一个 thread 对象,并启动线程,然后用其内部的 Looper 对象 创建一个 mServiceHandler 对象,将子线程的 Looper 和 ServiceHandler 建立了绑定关系,这样就可以使用 mServiceHandler 将消息发送到子线程去处理了。 生命周期方法 onStartCommand() 方法会在 IntentService 每次被启动时调用,一般会这里处理启动 IntentService 传递 Intent 解析携带的数据: 又调用了 start() 方法: 就是用 mServiceHandler 发送了一条包含 startId 和 intent 的消息,消息的发送还是在主线程进行的,接下来消息的接收、处理就是在子线程进行的: 当接收到消息时,通过 onHandleIntent() 方法在子线程处理 intent 对象, onHandleIntent() 方法执行结束后,通过 stopSelf(msg.arg1) 等待所有消息处理完毕后终止服务。 为什么消息的处理是在子线程呢?这里涉及到 Handler 的内部消息机制,简单的说,因为 ServiceHandler 使用的 Looper 对象就是在 HandlerThread 这个子线程类里创建的,并通过 Looper.loop() 开启消息循环,不断从消息队列(单链表)中取出消息,并执行,截取 loop() 的部分源码: dispatchMessage() 方法间接会调用 handleMessage() 方法,所以最终 onHandleIntent() 就在子线程中划线执行了,即 HandlerThread 的 run() 方法。 这就是 IntentService 实现的核心,通过 HandlerThread + Hanlder 把启动 IntentService 的 Intent 从主线程切换到子线程,实现让 Service 可以处理耗时任务的功能! AsyncTask 是 Android 中轻量级的异步任务抽象类,它的内部主要由线程池以及 Handler 实现,在线程池中执行耗时任务并把结果通过 Handler 机制中转到主线程以实现UI操作。典型的用法如下: 从 Android3.0 开始,AsyncTask 默认是串行执行的: 如果需要并行执行可以这么做: AsyncTask 的源码不多,还是比较容易理解的。根据上边的用法,可以从 execute() 方法开始我们的分析: 看到 @MainThread 注解了吗?所以 execute() 方法需要在主线程执行哦! 进而又调用了 executeOnExecutor() : 可以看到,当任务正在执行或者已经完成,如果又被执行会抛出异常!回调方法 onPreExecute() 最先被执行了。 传入的 sDefaultExecutor 参数,是一个自定义的串行线程池对象,所有任务在该线程池中排队执行: 可以看到 SerialExecutor 线程池仅用于任务的排队, THREAD_POOL_EXECUTOR 线程池才是用于执行真正的任务,就是我们线程池部分讲到的 ThreadPoolExecutor : 再回到 executeOnExecutor() 方法中,那么 exec.execute(mFuture) 就是触发线程池开始执行任务的操作了。 那 executeOnExecutor() 方法中的 mWorker 是什么? mFuture 是什么?答案在 AsyncTask 的构造函数中: 原来 mWorker 是一个 Callable 对象, mFuture 是一个 FutureTask 对象,继承了 Runnable 接口。所以 mWorker 的 call() 方法会在 mFuture 的 run() 方法中执行,所以 mWorker 的 call() 方法在线程池得到执行! 同时 doInBackground() 方法就在 call() 中方法,所以我们自定义的耗时任务逻辑得到执行,不就是我们第二部分讲的那一套吗! doInBackground() 的返回值会传递给 postResult() 方法: 就是通过 Handler 将最终的耗时任务结果从子线程发送到主线程,具体的过程是这样的, getHandler() 得到的就是 AsyncTask 构造函数中初始化的 mHandler , mHander 又是通过 getMainHandler() 赋值的: 可以在看到 sHandler 是一个 InternalHandler 类对象: 所以 getHandler() 就是在得到在主线程创建的 InternalHandler 对象,所以 就可以完成耗时任务结果从子线程到主线程的切换,进而可以进行相关UI操作了。 当消息是 MESSAGE_POST_RESULT 时,代表任务执行完成, finish() 方法被调用: 如果任务没有被取消的话执行 onPostExecute() ,否则执行 onCancelled() 。 如果消息是 MESSAGE_POST_PROGRESS , onProgressUpdate() 方法被执行,根据之前的用法可以 onProgressUpdate() 的执行需要我们手动调用 publishProgress() 方法,就是通过 Handler 来发送进度数据: 进行中的任务如何取消呢?AsyncTask 提供了一个 cancel(boolean mayInterruptIfRunning) ,参数代表是否中断正在执行的线程任务,但是呢并不靠谱, cancel() 的方法注释中有这么一段: 大致意思就是调用 cancel() 方法后, onCancelled(Object) 回调方法会在 doInBackground() 之后被执行而 onPostExecute() 将不会被执行,同时你应该 doInBackground() 回调方法中通过 isCancelled() 来检查任务是否已取消,进而去终止任务的执行! 所以只能自己动手了: AsyncTask 整体的实现流程就这些了,源码是最好的老师,自己跟着源码走一遍有些问题可能就豁然开朗了!
Android——消息分发机制
什么是 Handler 机制 ? Handler 机制是 Android 中用于 线程间通信 的一套通信机制。 为什么是 Handler ?Handler 机制为什么被那么多次的提及 ? 从Android4.0开始,Android 中网络请求强制不允许在主线程中操作,而更新UI的操作则不允许在子线程中执行。当在子线程中执行网络请求,拿到服务器返回的数据之后,要更新UI。由于系统的要求,势必会产生一种矛盾:数据在子线程,更新UI要在主线程。此时我们必须要把数据返回到主线程中才行,Handler机制应运而生。 Android 中针对耗时的操作,放在主线程操作,轻者会造成 UI 卡顿,重则会直接无响应,造成 Force Close。同时在 Android 3.0 以后,禁止在主线程进行网络请求。 针对耗时或者网络操作,那就不能在主线程进行直接操作了,需要放在子线程或者是工作线程中进行操作,操作完成以后,再更新主线程即 UI 线程。这里就涉及到一个问题了,在子线程执行完成以后,怎么能更新到主线程即 UI 线程呢,针对以上问题,就需要用到 Android 的消息机制了,即: Handler, Message, MessageQueue, Looper 全家桶 Handler机制中最重要的四个对象 Handler的构造方法: Looper : Handler的使用: MessageQueue: Looper.loop() Handler.dispatchMessage() handler导致activity内存泄露的原因: handler发送的消息在当前handler的消息队列中,如果此时activity finish掉了,那么消息队列的消息依旧会由handler进行处理,若此时handler声明为内部类(非静态内部类),我们知道内部类天然持有外部类的实例引用,这样在GC垃圾回收机制进行回收时发现这个Activity居然还有其他引用存在,因而就不会去回收这个Activity,进而导致activity泄露。 假如在子线程执行了耗时操作,这时用户操作进入了其他的 acitvity, 那么 MainActivity 就会被内存回收的,但是这个时候发现 Handler 还在引用着 MainActivity,内存无法及时回收,造成内存泄漏。 Handler 防止内存泄漏常见方法: 为什么通过 Handler 可以把子线程的结果通知或者携带给 UI 线程 ? 这里的 Handler 指的是主线程的 Handler ,同时与 Handler 配套的 Looper , MessageQueue 是在 UI 线程初始化的,所以在子线程中调用 Handler 发送消息可以更新 UI 线程。 Looper 在 UI 线程源码, 在 ActivityThread 类:
Android 重学系列 View的绘制流程(六) 硬件渲染(上)
本文开始聊聊Android中的硬件渲染。如果跟着我的文章顺序,从SF进程到App进程的绘制流程一直阅读,我们到这里已经有了一定的基础,可以试着进行横向比对如Chrome浏览器渲染流程,看看软件渲染,硬件渲染,SF合成都做了什么程度的优化。 先让我们回顾一下负责硬件渲染的主体对象ThreadedRenderer在整个绘制流程中做了哪几个步骤。 在硬件渲染的过程中,有一个很核心的对象RenderNode,作为每一个View绘制的节点对象。 当每一次进行准备进行绘制的时候,都会雷打不动执行如下三个步骤: 如果遇到什么问题欢迎来到 https://www.jianshu.com/p/c84bfa909810 下进行讨论 实际上整个硬件渲染的设计还是比较庞大。因此本文先聊聊ThreadedRender整个体系中主要对象的构造以及相关的原理。 首先来认识下面几个重要的对象有一个大体的印象。 在Java层中面向Framework中,只有这么多,下面是一一映射的简图。 能看到实际上RenderNode也会跟着View 树的构建同时一起构建整个显示层级。也是因此ThreadedRender也能以RenderNode为线索构建出一套和软件渲染一样的渲染流程。 仅仅这样?如果只是这么简单,知道我习惯的都知道,我喜欢把相关总结写在最后。如果把总揽写在正文开头是因为设计比较繁多。因为我们如果以流水线的形式进行剖析容易造成迷失细节的困境。 让我继续介绍一下,在硬件渲染中native层的核心对象。 如下是一个思维导图: 有这么一个大体印象后,就不容易迷失在源码中。我们先来把这些对象的实例化以及上面列举的ThreadedRenderer在ViewRootImpl中执行行为的顺序和大家来聊聊其原理,先来看看ThreadedRenderer的实例化。 当发现mSurfaceHolder为空的时候会调用如下函数: 而这个方法则调用如下的方法对ThreadedRenderer进行创建: 文件:/ frameworks / base / core / java / android / view / ThreadedRenderer.java 能不能创建的了ThreadedRenderer则决定于全局配置。如果ro.kernel.qemu的配置为0,说明支持OpenGL 则可以直接返回true。如果qemu.gles为-1说明不支持OpenGL es返回false,只能使用软件渲染。如果设置了qemu.gles并大于0,才能打开硬件渲染。 我们能看到ThreadedRenderer在初始化,做了三件事情: 关键是看1-3点中ThreadRenderer都做了什么。 文件:/ frameworks / base / core / jni / android_view_ThreadedRenderer.cpp 能看到这里是直接实例化一个RootRenderNode对象,并把指针的地址直接返回。 能看到RootRenderNode继承了RenderNode对象,并且保存一个JavaVM也就是我们所说的Java虚拟机对象,一个java进程全局只有一个。同时通过getForThread方法,获取ThreadLocal中的Looper对象。这里实际上拿的就是UI线程的Looper。 在这个构造函数有一个mDisplayList十分重要,记住之后会频繁出现。接着来看看RenderNode的头文件: 文件:/ frameworks / base / libs / hwui / RenderNode.h 实际上我把几个重要的对象留下来: 文件:/ frameworks / base / core / java / android / view / RenderNode.java 能看到很简单,就是包裹一个native层的RenderNode返回一个Java层对应的对象开放Java层的操作API。 能看到这个过程生成了两个对象: 这个对象实际上让RenderProxy持有一个创建动画上下文的工厂。RenderProxy可以通过ContextFactoryImpl为每一个RenderNode创建一个动画执行对象的上下文AnimationContextBridge。 文件:/ frameworks / base / libs / hwui / renderthread / RenderProxy.cpp 在这里有几个十分重要的对象被实例化,当然这几个对象在聊TextureView有聊过( SurfaceView和TextureView 源码浅析 ): 我们依次看看他们初始化都做了什么。 文件:/ frameworks / base / libs / hwui / renderthread / RenderThread.cpp 能看到其实就是简单的调用RenderThread的构造函数进行实例化,并且返回对象的指针。 RenderThread是一个线程对象。先来看看其头文件继承的对象: 文件:/ frameworks / base / libs / hwui / renderthread / RenderThread.h 其中RenderThread的中进行排队处理的任务队列实际上是来自ThreadBase的WorkQueue对象。 文件:/ frameworks / base / libs / hwui / thread / ThreadBase.h ThreadBase则是继承于Thread对象。当调用start方法时候其实就是调用Thread的run方法启动线程。 另一个更加关键的对象,就是实例化一个Looper对象到WorkQueue中。而直接实例化Looper实际上就是新建一个Looper。但是这个Looper并没有获取当先线程的Looper,这个Looper做什么的呢?下文就会揭晓。 WorkQueue把一个Looper的方法指针设置到其中,其作用可能是完成了某一件任务后唤醒Looper继续工作。 而start方法会启动Thread的run方法。而run方法最终会走到threadLoop方法中,至于是怎么走进来的,之后有机会会解剖虚拟机的源码线程篇章进行讲解。 在threadloop中关键的步骤有如下四个: 在这个过程中创建了几个核心对象: 另一个核心的方法就是initializeDisplayEventReceiver,这个方法为WorkQueue的Looper注册了监听: 能看到在这个Looper中注册了对DisplayEventReceiver的监听,也就是Vsync信号的监听,回调方法为displayEventReceiverCallback。 我们暂时先对RenderThread的initializeDisplayEventReceiver方法探索到这里,我们稍后继续看看回调后的逻辑。 文件:/ frameworks / base / libs / hwui / thread / ThreadBase.h 能看到这里的逻辑很简单实际上就是调用Looper的pollOnce方法,阻塞Looper中的循环,直到Vsync的信号到来才会继续往下执行。详细的可以阅读我写的 Handler与相关系统调用的剖析 系列文章。 文件:/ frameworks / base / libs / hwui / thread / ThreadBase.h 实际上调用的是WorkQueue的process方法。 文件:/ frameworks / base / libs / hwui / thread / WorkQueue.h 能看到这个过程中很简单,几乎和Message的loop的逻辑一致。如果Looper的阻塞打开了,则首先找到预计执行时间比当前时刻都大的WorkItem。并且从mWorkQueue移除,最后添加到toProcess中,并且执行每一个WorkItem的work方法。而每一个WorkItem其实就是通过从某一个压入方法添加到mWorkQueue中。 到这里,我们就明白了RenderThread中是如何消费渲染任务的。那么这些渲染任务又是哪里诞生呢? 上文聊到了在RenderThread中的Looper会监听Vsync信号,当信号回调后将会执行下面的回调。 能看到这个方法的核心实际上就是调用drainDisplayEventQueue方法,对ui渲染任务队列进行处理。 能到在这里mVsyncRequested设置为false,且mFrameCallbackTaskPending将会设置为true,并且调用queue的postAt的方法执行ui渲染方法。 还记得queue实际是是指WorkQueue,而WorkQueue的postAt方法实际实现如下: / frameworks / base / libs / hwui / thread / WorkQueue.h 情景带入,当一个Vsync信号达到Looper的监听者,此时就会通过WorkQueue的drainDisplayEventQueue 压入一个任务到队列中。 每一个默认的任务都是执行dispatchFrameCallback方法。这里的判断mWorkQueue中是否存在比当前时间更迟的时刻,并返回这个WorkItem。如果这个对象在头部needsWakeup为true,说明可以进行唤醒了。而mWakeFunc这个方法指针就是上面传下来: 把阻塞的Looper唤醒。当唤醒后就继续执行WorkQueue的process方法。也就是执行dispatchFrameCallbacks方法。 在这里执行了两个事情: 先添加到mPendingRegistrationFrameCallbacks集合中,在上面提到过的threadLoop中,会执行如下逻辑: 如果mPendingRegistrationFrameCallbacks大小不为0,则的把mPendingRegistrationFrameCallbacks中的IFrameCallback全部迁移到mFrameCallbacks中。 而这个方法什么时候调用呢?稍后就会介绍。其实这部分的逻辑在TextureView的解析中提到过。 接下来将会初始化一个重要对象: 这个对象名字叫做画布的上下文,具体是什么上下文呢?我们现在就来看看其实例化方法。 文件:/ frameworks / base / libs / hwui / renderthread / CanvasContext.cpp 文件:/ device / generic / goldfish / init.ranchu.rc 在init.rc中默认是opengl,那么我们就来看看下面的逻辑: 首先实例化一个OpenGLPipeline管道,接着OpenGLPipeline作为参数实例化CanvasContext。 文件:/ frameworks / base / libs / hwui / renderthread / OpenGLPipeline.cpp 能看到在OpenGLPipeline中,实际上就是存储了RenderThread对象,以及RenderThread中的mEglManager。透过OpenGLPipeline来控制mEglManager进而进一步操作OpenGL。 做了如下操作: 文件:/ frameworks / base / libs / hwui / renderstate / RenderState.cpp 文件:/ frameworks / base / libs / hwui / renderthread / DrawFrameTask.cpp 实际上就是保存这三对象RenderThread;CanvasContext;RenderNode。 文件:/ frameworks / base / core / jni / android_view_ThreadedRenderer.cpp 能看到实际上就是调用RenderProxy的setName方法给当前硬件渲染对象设置名字。 文件:/ frameworks / base / libs / hwui / renderthread / RenderProxy.cpp 能看到在setName方法中,实际上就是调用RenderThread的WorkQueue,把一个任务队列设置进去,并且调用runSync执行。 能看到这个方法实际上也是调用post执行排队执行任务,不同的是,这里使用了线程的Future方式,阻塞了执行,等待CanvasContext的setName工作完毕。
android启动后怎么查看其里面的进程和线程
. Android中进程与进程、线程与线程之间如何通信?1)一个 Android 程序开始运行时,会单独启动一个Process。默认情况下,所有这个程序中的Activity或者Service都会跑在这个Process。默认情况下,一个Android程序也只有一个Process,但一个Process下却可以有许多个Thread。2)一个 Android 程序开始运行时,就有一个主线程Main Thread被创建。该线程主要负责UI界面的显示、更新和控件交互,所以又叫UI Thread。3)一个Android程序创建之初,一个Process呈现的是单线程模型--即MainThread,所有的任务都在一个线程中运行,所以,MainThread所调用的每一个函数,其耗时应该越短越好,而对于比较耗时的工作,应该交给子线程去做,以避免主线程(UI线程)被阻塞,导致程序出现ANR(Application not response)一个Activity就运行在一个线程中吗?或者编码时,如果不是明确安排在不同线程中的两个Activity,其就都是在同一个线程中?那从一个Activity跳转到另一个Activity时,是不是跳出的那个Activity就处在睡眠状态了?【答】 每个Activity都有一个Process属性,可以指定该Activity是属于哪个进程的。当然如果不明确指明,应该就是从属于默认进程(Application指定的,如其未指定,应该就是默认主进程)。Android中有Task的概念,而同一个Task的各个Activity会形成一个栈,只有站定的Activity才有机会与用户交互。原文地址:Android中的进程与线程 原文作者:江鹏当应用程序的组件第一次运行时,Android将启动一个只有一个执行线程的Linux进程。默认,应用程序所有的组件运行在这个进程和线程中。然而,你可以安排组件运行在其他进程中,且你可以为进程衍生出其它线程。本文从下面几点来介绍Android的进程与线程:1、进程组件运行于哪个进程中由清单文件控制。组件元素——<activity>、<service>、<receiver>、<provider>,都有一个process属性可以指定组件运行在哪个进程中。这个属性可以设置为每个组件运行在自己的进程中,或者某些组件共享一个进程而其他的不共享。他们还可以设置为不同应用程序的组件运行在同一个进程中——假设这些应用程序共享同一个Linux用户ID且被分配了同样的权限。<application>元素也有process属性,为所有的组件设置一个默认值。所有的组件都在特定进程的主线程中实例化,且系统调用组件是由主线程派遣。不会为每个实例创建单独的线程,因此,对应这些调用的方法——诸如View.onKeyDown()报告用用户的行为和生命周期通知,总是运行在进程的主线程中。这意味着,没有组件当被系统调用时应该执行很长时间或阻塞操作(如网络操作或循环计算),因为这将阻塞进程中的其它组件。你可以为长操作衍生独立的线程。public boolean onKeyDown(int keyCode,KeyEvent event):默认实现KeyEvent.Callback.onKeyMultiple(),当按下视图的KEYCODE_DPAD_CENTER或KEYCODE_ENTER然后释放时执行,如果视图可用且可点击。参数keyCode-表示按钮被按下的键码,来自KeyEvent event-定义了按钮动作的KeyEvent对象返回值如果你处理事件,返回true;如果你想下一个接收者处理事件,返回false。当内存剩余较小且其它进程请求较大内存并需要立即分配,Android要回收某些进程,进程中的应用程序组件会被销毁。当他们再次运行时,会重新开始一个进程。当决定终结哪个进程时,Android会权衡他们对用户重要性的相对权值。例如,与运行在屏幕可见的活动进程相比(前台进程),它更容易关闭一个进程,它的活动在屏幕是不可见(后台进程)。决定是否终结进程,取决于运行在进程中的组件状态。关于组件的状态,将在后面一篇——组件生命周期中介绍。2、线程虽然你可能会将你的应用程序限制在一个进程中,但有时候你会需要衍生一个线程做一些后台工作。因为用户界面必须很快地响应用户的操作,所以活动寄宿的线程不应该做一些耗时的操作如网络下载。任何不可能在短时间完成的操作应该分配到别的线程。线程在代码中是用标准的Java线程对象创建的,Android提供了一些方便的类来管理线程——Looper用于在线程中运行消息循环、Handler用户处理消息、HandlerThread用户设置一个消息循环的线程。Looper类该类用户在线程中运行消息循环。线程默认没有消息循环,可以在线程中调用prepare()创建一个运行循环;然后调用loop()处理消息直到循环结束。大部分消息循环交互是通过Handler类。下面是一个典型的执行一个Looper线程的例子,分别使用prepare()和loop()创建一个初始的Handler与Looper交互: 1. Android中进程与进程、线程与线程之间如何通信?1)一个 Android 程序开始运行时,会单独启动一个Process。默认情况下,所有这个程序中的Activity或者Service都会跑在这个Process。默认情况下,一个Android程序也只有一个Process,但一个Process下却可以有许多个Thread。2)一个 Android 程序开始运行时,就有一个主线程Main Thread被创建。该线程主要负责UI界面的显示、更新和控件交互,所以又叫UI Thread。3)一个Android程序创建之初,一个Process呈现的是单线程模型--即MainThread,所有的任务都在一个线程中运行,所以,MainThread所调用的每一个函数,其耗时应该越短越好,而对于比较耗时的工作,应该交给子线程去做,以避免主线程(UI线程)被阻塞,导致程序出现ANR(Application not response)一个Activity就运行在一个线程中吗?或者编码时,如果不是明确安排在不同线程中的两个Activity,其就都是在同一个线程中?那从一个Activity跳转到另一个Activity时,是不是跳出的那个Activity就处在睡眠状态了?【答】 每个Activity都有一个Process属性,可以指定该Activity是属于哪个进程的。当然如果不明确指明,应该就是从属于默认进程(Application指定的,如其未指定,应该就是默认主进程)。Android中有Task的概念,而同一个Task的各个Activity会形成一个栈,只有站定的Activity才有机会与用户交互。原文地址:Android中的进程与线程 原文作者:江鹏当应用程序的组件第一次运行时,Android将启动一个只有一个执行线程的Linux进程。默认,应用程序所有的组件运行在这个进程和线程中。然而,你可以安排组件运行在其他进程中,且你可以为进程衍生出其它线程。本文从下面几点来介绍Android的进程与线程:1、进程组件运行于哪个进程中由清单文件控制。组件元素——<activity>、<service>、<receiver>、<provider>,都有一个process属性可以指定组件运行在哪个进程中。这个属性可以设置为每个组件运行在自己的进程中,或者某些组件共享一个进程而其他的不共享。他们还可以设置为不同应用程序的组件运行在同一个进程中——假设这些应用程序共享同一个Linux用户ID且被分配了同样的权限。<application>元素也有process属性,为所有的组件设置一个默认值。所有的组件都在特定进程的主线程中实例化,且系统调用组件是由主线程派遣。不会为每个实例创建单独的线程,因此,对应这些调用的方法——诸如View.onKeyDown()报告用用户的行为和生命周期通知,总是运行在进程的主线程中。这意味着,没有组件当被系统调用时应该执行很长时间或阻塞操作(如网络操作或循环计算),因为这将阻塞进程中的其它组件。你可以为长操作衍生独立的线程。public boolean onKeyDown(int keyCode,KeyEvent event):默认实现KeyEvent.Callback.onKeyMultiple(),当按下视图的KEYCODE_DPAD_CENTER或KEYCODE_ENTER然后释放时执行,如果视图可用且可点击。参数keyCode-表示按钮被按下的键码,来自KeyEvent event-定义了按钮动作的KeyEvent对象返回值如果你处理事件,返回true;如果你想下一个接收者处理事件,返回false。当内存剩余较小且其它进程请求较大内存并需要立即分配,Android要回收某些进程,进程中的应用程序组件会被销毁。当他们再次运行时,会重新开始一个进程。当决定终结哪个进程时,Android会权衡他们对用户重要性的相对权值。例如,与运行在屏幕可见的活动进程相比(前台进程),它更容易关闭一个进程,它的活动在屏幕是不可见(后台进程)。决定是否终结进程,取决于运行在进程中的组件状态。关于组件的状态,将在后面一篇——组件生命周期中介绍。2、线程虽然你可能会将你的应用程序限制在一个进程中,但有时候你会需要衍生一个线程做一些后台工作。因为用户界面必须很快地响应用户的操作,所以活动寄宿的线程不应该做一些耗时的操作如网络下载。任何不可能在短时间完成的操作应该分配到别的线程。线程在代码中是用标准的Java线程对象创建的,Android提供了一些方便的类来管理线程——Looper用于在线程中运行消息循环、Handler用户处理消息、HandlerThread用户设置一个消息循环的线程。Looper类该类用户在线程中运行消息循环。线程默认没有消息循环,可以在线程中调用prepare()创建一个运行循环;然后调用loop()处理消息直到循环结束。大部分消息循环交互是通过Handler类。下面是一个典型的执行一个Looper线程的例子,分别使用prepare()和loop()创建一个初始的Handler与Looper交互: 2.1、远程过程调用(Remote procedure calls,RPCs)Android有一个轻量级的远程过程调用机制——方法在本地调用却在远程(另外一个进程中)执行,结果返回给调用者。这需要将方法调用和它伴随的数据分解为操作系统能够理解的层次,从本地进程和地址空间传输到远程进程和地址空间,并重新组装调用。返回值以相反方向传输。Android提供了做这些工作的所有代码,这样我们可以专注于定义和执行RPC接口本身。一个RPC接口仅包含方法。所有的方法同步地执行(本地方法阻塞直到远程方法执行完成),即使是没有返回值。简言之,该机制工作原理如下:首先,你用简单的IDL(interface definition language,接口定义语言)声明一个你想实现的RPC接口。从这个声明中,aidl工具生成一个Java接口定义,提供给本地和远程进程。它包含两个内部类,如下图所示:内部类有管理你用IDL定义的接口的远程过程调用所需要的所有代码。这两个内部类都实现了IBinder接口。其中之一就是在本地由系统内部使用,你写代码可以忽略它。另外一个是Stub,扩展自Binder类。除了用于有效地IPC(interprocess communication)调用的内部代码,内部类在RPC接口声明中还包含方法声明。你可以定义Stub的子类实现这些方法,如图中所示。通常情况下,远程过程有一个服务管理(因为服务能通知系统关于进程和它连接的其它进程的信息)。它有由aidl工具生成的接口文件和Stub子类实现的RPC方法。服务的客户端仅有由aidl工具生成的接口文件。下面介绍服务如何与它的客户端建立连接:· 服务的客户端(在本地端的)应该实现onServiceConnected() 和onServiceDisconnected() 方法,因此当与远程服务建立连接成功和断开连接是会通知它。然后调用bindService() 建立连接。 · 服务的onBind()方法将实现为接受或拒绝连接,者取决于它接受到的意图(该意图传送到binServive())。如果连接被接受,它返回一个Stub子类的实例。 · 如果服务接受连接,Android调用客户端的onServiceConnected()方法且传递给它一个IBinder对象,返回由服务管理的Stub子类的一个代理。通过代理,客户端可以调用远程服务。 这里只是简单地描述,省略了一些RPC机制的细节。你可以查阅相关资料或继续关注Android开发之旅,后面将为你奉上。2.2、线程安全方法在一些情况下,你实现的方法可能会被不止一个线程调用,因此必须写成线程安全的。这对远程调用方法是正确的——如上一节讨论的RPC机制。当从IBinder进程中调用一个IBinder对象中实现的一个方法,这个方法在调用者的线程中执行。然而,当从别的进程中调用,方法将在Android维护的IBinder进程中的线程池中选择一个执行,它不在进程的主线程中执行。例如,一个服务的onBind()方法在服务进程的主线程中被调用,在onBind()返回的对象中执行的方法(例如,实现RPC方法的Stub子类)将在线程池中被调用。由于服务可以有一个以上的客户端,所以同时可以有一个以上的线程在执行同一个IBinder方法。因此,IBinder的方法必须是线程安全的。同样,一个内容提供者可以接受其它进程产生的数据请求。虽然ContentResolver 和 ContentProvider 类隐藏进程通信如何管理的,对应哪些请求的ContentResolver 方法——query()、insert()、delete()、update()、getType(),在内容提供者的进程的线程池中被调用,而不是在这一进程的主线程中。因为这些方法可以同时从任意数量的线程中调用,他们也必须实现为线程安全的。
Android Handle中Looper.loop()的死循环为什么在主线程中不会产生卡死现象
1. 主线程,负责一些UI更新操作,归类为一个线程,线程在Android中是有生命周期的,任务最终是会结束的。 2. Looper.loop()的死循环正是维护了主线程的超长生命周期,loop方法一直循环处理任务,没有任务的时候会休眠,有任务的时候会唤醒然后进行处理,所以也不会占用太多系统资源。 3. 卡死,可能有误解,循环的过程中本生不会出现ANR,在循环的过程中,如果执行了耗时且在规定时间内没有完成消息派发,才会出现ANR。
android主线程中是不是只有一个Looper,一个MessageQueue
Android中的Runnable并不一定是新开的线程,比如下面调用的方法就是运行在UI主线程中Hanlder handler = new Handler();handler.post(new Runnable(){ public void run(){}});官方文档对此的解释是:The runnable will be run on the user interface thread. ”boolean android.view.View .post(Runnable action)Causes the Runnable to be added to the message queue. The runnable will be run on the user interface thread.Parameters: action The Runnable that will be executed. Returns: Returns true if the Runnable was successfully placed in to the message queue. Returns false on failure, usually because the looper processing the message queue is exiting.我们可以通过handler的对象的post方法,把Runnable对象(一般是Runnable的子类)传过去,handler会在Looper中调用Runnable的run方法执行,Runnable是一个接口,不是一个线程,一般线程会实现Runnable接口这里我们看代码handler.post(new Runnable(){好像是new了一个interface,其实是new一个实现Runnable的匿名内部类(Inner Anoymous Class)}) 这是一个简练的方法Runnalbe是一个接口,不是一个线程,一般线程会实现Runnalbe接口,所以如果我们使用匿名内部类是运行在UI主线程的,如果我们使用实现这个Runnable接口的线程类,则是运行在对应的线程的。具体来说这个函数的工作原理如下:View.post(Runnalbe)方法,在post(Runanble action)方法中,View获得当前主线程(即UI线程)的handler,然后将action对象post到handler里面去,在Handler里,它将传递过来的action对象封装成一个Message(Message 的callback为action),然后将其投入到UI线程的消息循环中,在handler再次处理该Message时,有一条分支(未解释的那条)就是为它所设,直接调用runnable的run方法,而此时,已经路由到UI线程里,因此我们可以毫无顾虑来更新UI。如下图,前面看到的代码,我们这里的Message的callback为一个Runnalbe的匿名内部类,这种情况下,由于不是在新的线程中使用,所以千万别做复杂的计算逻辑。
Android-Looper
Looper.loop是一个死循环,拿不到需要处理的Message就会阻塞,那在UI线程中为什么不会导致ANR? 首先我们来看造成ANR的原因: 1.当前的事件没有机会得到处理(即主线程正在处理前一个事件,没有及时的完成或者looper被某种原因阻塞住了) 2.当前的事件正在处理,但没有及时完成 我们再来看一下APP的入口ActivityThread的main方法: 显而易见的,如果main方法中没有looper进行死循环,那么主线程一运行完毕就会退出,会导致直接崩溃,还玩什么! 现在我们知道了消息循环的必要性,那为什么这个死循环不会造成ANR异常呢? 我们知道Android 的是由事件驱动的,looper.loop() 不断地接收事件、处理事件,每一个点击触摸或者说Activity的生命周期都是运行在 Looper的控制之下,如果它停止了,应用也就停止了。只能是某一个消息或者说对消息的处理阻塞了 Looper.loop(),而不是 Looper.loop() 阻塞它,这也就是我们为什么不能在UI线程中处理耗时操作的原因。 主线程Looper从消息队列读取消息,当读完所有消息时,主线程阻塞。子线程往消息队列发送消息,唤醒主线程,主线程被唤醒只是为了读取消息,当消息读取完毕,再次睡眠。因此loop的循环并不会对CPU性能有过多的消耗。 初始化当前线程和Looper,这样可以在实际开始启动循环(loop())之前创建一个Handler并且关联一个looper。确保在先调用这个方法,然后调用loop()方法,并且通过调用quit()结束。 这里面的入参boolean表示Looper是否允许退出,true就表示允许退出,对于false则表示Looper不允许退出。 初始化当前当前线程的looper。并且标记为一个程序的主Looper。由Android环境来创建应用程序的主Looper。因此这个方法不能由咱们来调用。另请参阅prepare() 这里的sThreadLocal.get()是和prepare(boolean)方法里面的sThreadLocal.set(new Looper(quitAllowed));一一对应的。而在prepareMainLooper()方法里面。 退出循环 将终止(loop()方法)而不处理消息队列中的任何更多消息。在调用quit()后,任何尝试去发送消息都是失败的。例如Handler.sendMessage(Message)方法将返回false。因为循环终止之后一些message可能会被无法传递,所以这个方法是不安全的。可以考虑使用quitSafely()方法来确保所有的工作有序地完成。 安全退出循环 调用quitSafely()方法会使循环结束,只要消息队列中已经被传递的所有消息都将被处理。然而,在循环结束之前,将来不会提交处理延迟消息。 调用退出后,所有尝试去发送消息都将失败。就像调用Handler.sendMessage(Message)将返回false。
Android之Looper使用
Looper是Android中用于实现消息循环的一个类,它和Handler、MessageQueue、Message等一起组成了异步消息处理机制。通过它,我们可以在后台线程中实现UI更新等操作。使用Looper,一般需要以下步骤:1. 在子线程中创建Looper对象,并开启消息循环:```javaLooper.prepare();Looper.loop();```2. 在子线程中创建Handler对象,并通过Handler对象发送消息到消息队列中:```javaHandler handler = new Handler() { @Override public void handleMessage(Message msg) { // 在这里处理消息 }};handler.sendEmptyMessage(0);```3. 在主线程中创建Handler对象,并通过Handler对象发送消息到子线程中的消息队列中:```javanew Thread(new Runnable() { @Override public void run() { Looper.prepare(); Handler handler = new Handler() { @Override public void handleMessage(Message msg) { // 在这里处理消息 } }; Looper.loop(); }}).start();Handler handler = new Handler() { @Override public void handleMessage(Message msg) { // 在这里发送消息到子线程 handler.sendEmptyMessage(0); }};```需要注意的是,子线程中的消息循环要在消息发送之前开启,在消息处理完成之后才能结束,否则程序会崩溃。同时,在子线程退出前,需要调用Looper.quit()方法来结束消息循环。另外,在使用Looper时还需要注意避免内存泄露问题,避免使用匿名内部类等操作。
十世文"莲爱东方"中提及的Yam和Ander故事分别是谁,出自什么文?
Yam是《霜花店》同人《霜花夜吟》 Yam是穿成洪麟的Ander的另一半貌似说是李寻欢……也有人说是孟星魂和傅红雪那对……
英语wore their caps and gowns怎么翻译?
戴着帽子和长袍
你们觉得FTisland李弘基和MBLAQ的MIR长的像吗?
第一次看到的时候觉得像,那时候MIR的发型也像弘基的,不过看多了就觉得不会了。记得MBLAQ刚出道的时候也谈过这个话题,说是有FANS把MIR错认成了弘基了。由此可见,说两人像是有根据的。
giocando是什么意思?
意思是我的天啊。以下是意大利语的相关介绍:意大利语(意大利文:Italiano;英文:Italian)属于印欧语系罗曼语族,是意大利、瑞士、梵蒂冈和圣马力诺的官方语言之一,广义的意大利语包括了托斯卡纳语、伦巴第语、萨丁尼亚语、那不勒斯语、西西里语、威尼斯语等语言;而狭义的意大利语,是指以托斯卡纳语为准的标准意大利语。作为伟大的文艺复兴文化的媒介,意大利语曾对西欧其它语言起过深刻的影响。意大利语是意大利的官方语言。标准意大利语是托斯卡纳的方言,发音在于意大利南半部方言之间。以上资料参考百度百科——意大利语
求Sandra.N 新单《Liar》的歌词
I"m a liar, you"re a liarDon"t look into my eyesI"m liar, you"re a liarWe stand behind the liesI"m a liar, you"re a liarDon"t break into my soulI"m liar, you"re a liarMy heart is like a stoneAre you watching on meWhen I"m sleeping next to your armsOnly now it should beA moment to heal the scarsWe can"t be enemies foreverYou can be on my side tonightUsed to be in the game togetherNow we only know to fight I"m a liar, you"re a liarDon"t look into my eyesI"m liar, you"re a liarWe stand behind the liesI"m a liar, you"re a liarDon"t break into my soulI"m liar, you"re a liarMy heart is like a stoneWhen you"re looking at meI forget about all the painWhen I"m turning awayYou just try to put me on blameWe can t be enemies foreverBaby there is no golden meanUsed to be in the game togetherTell me who is gonna winNo no no I m tired of all this liesNo no no should we stay or should we partNo no no please don t look into my eyesNo no no you can break you can melt my heartI"m a liar, you"re a liarDon"t look into my eyesI"m liar, you"re a liarWe stand behind the liesI"m a liar, you"re a liarDon"t break into my soulI"m liar, you"re a liarMy heart is like a stone
Siula Grande峰是哪座山峰?它来自哪个国家?
秘鲁境内安第斯山脉6344米的Siula Grande峰 1985年25岁的英国登山家Joe Simpson和同伴Simon Yates 选择了从未有人成功的近乎垂直的西坡上升,上山顺利,下山遭遇了种种困境,但最终成功登顶并返回山脚。 Joe的经历成为登山史上最传奇的自救故事之一,而Siula Grande峰西坡,至今也再未有他人成功。
candy韩文歌词
是hot的candy 么?以下是歌词:사실은 오늘 너와의 만남을 정리하고 싶어 널 만날 거야 이런 날 이해해 어렵게 맘 정한 거라 네게 말할 거지만 사실 오늘 아침에 그냥 나 생각한 거야 햇살에 일어나 보니 너무나 눈부셔 모든 게 다 변할 거야 널 향한 마음도 그렇지만 널 사랑 않는 게 아냐 이제는 나를 변화시킬 때니까 너 몰래몰래 몰래 다른 여자들과 비교 비교했지 자꾸만 깨어 가는 환상 속에 혼자서 울고 있는 초라하게 갇혀버린 나를 보았어 널 떠날 꺼야 음!널 떠날 꺼야 음! 하지만 아직까지 사랑하는걸 그래 그렇지만 내 맘속에 너를 잊어갈꺼야 머리 위로 비친 내 하늘 바라다보며 널 향한 마음을 이제는 굳혔지만 왠일인지 네게 더 다가갈수록 우린 같은 하늘을 아래서 있었지 단지 널 사랑해 이렇게 말했지 이제껏 준비했던 많은 말을 뒤로한 채 언제나 니 옆에 있을 게 이렇게 약속을 하겠어 저 하늘을 바라다보며 내게 하늘이 열려있어 그래그래 너는 내앞에 서있고 그래 다른 연인들은 키스를 해 하지만 항상 나는 너의 뒤에 있어야 만해 이제 그만해 음 나도 남잔데 음 내마음 너도 알고 있는걸 알아 그래 이제 나도 지쳐서 하늘만 바라볼 수밖에 햇살에 일어나 보니 너무나 눈부셔 모든 게 다 변할 거야 널 향한 마음도 그렇지만 널 사랑 않는 게 아냐 이제는 나를 변화시킬 때니까 머리 위로 비친 내 하늘 바라다보며 널 향한 마음을 이제는 굳혔지만 왠일인지 네게 더 다가갈수록 우린 같은 하늘을 아래서 있었지 단지 널 사랑해 이렇게 말했지 이제껏 준비했던 많은 말들을 뒤로한 채 언젠 니 옆에 있을게 이렇게 약속을 하겠어 저 하늘을 바라보며 한번더 한번더 말했지 이제껏 준비했던 많은 말을 뒤로한 채 언제나 니 옆에 있을 게 다신 너혼자 아냐 너의 곁엔 내가 있잖아
我要HOT的candy的罗马歌词~
安七炫: sa shil nan o neur neo wa eui man nam eur cheong ri hago sip eo neor man nir keo ya ee reon nar ee hae hae文熙畯: eo ryeop ke man cheong han keo ra ne ge mar har keo chi mansa sir o neur ah chim eh geu nyang na saeng kak han keo ya安七炫: haet sir eh ir eo na po ni neo moo na noon poo syeomo deun ke da pyeon han keo ya neor hyang han ma eum toHJ: geu reoh chi man neor sa rang an neun ke ah nyaee che neun na reur pyeon hwa si kir tte ni gga张佑赫&李在元: neo mor rae mor rae mor rae da reun yeo cha deur kwa pi gyo pi gyo haet chicha gyoo man kkae eo chi neun hwan sang sok eh honcha seo oor ko it neun cho ra ha ge kad hyeo peo rin na reur po at seoneor tteo nar keo ya eum! neor tteo nar keo ya eum!文熙畯: ha chi man ah chik kka chi sa rang ha neun keorgeu rae geu reoh chi man nae mam sok eh neor reur ich eo gar keo ya安七炫: meo ri wi ro pi chin nae ha neur pa ra da po myeoneor hyang han ma eum eur ee che neun koodchyeot chi man wen ir in chi nae ge da da ga gae soo rokoo rin kat eun ha neur ah rae seot it seot chi安胜浩: dan chi neor sa rang hae ee reoh ke mar haet chiee che ggeot choon pi haet teon man eum mar eur twi ro han chaeeon che na ni yeop eh it seur kkehee reoh ke yak sok eur ha geh seo cheoha neur eur pa ra da po myeo文熙畯: nae geh ha neur ee yeor ryeo it seogeur rae geu rae neo neun rae ap eh seo it kogeu rae da reun yeong in deur eun ki seu reur haeha chi man na neun neo eui wi eh it seo ya man hae张佑赫: ee che geu man hae eumna do nam chin te eumnae ma eum neo do ar ko it neun keor ar ahgeu rae ee che na do chi chyeo seo ha neur man pa ra por soo pakk eh安七炫: haet sir eh ir eo na po ni neo moo na noon poo syeomo deun ke da pyeon han keo ya neor hyang han ma eum to文熙畯: geu reoh chi man neor sa rang an neun ke ah nyaee che neun na reur pyeon hwa si kir tte ni gga安七炫: meo ri wi ro pi chin nae ha neur pa ra da po myeoneor hyang han ma eum eur ee che neun koodchyeot chi man wen ir in chi nae ge da da ga gae soo rokoo rin kat eun ha neur ah rae seot it seot chi安胜浩: dan chi neor sa rang haeee reoh ke mar haet chiee che kkeot choon pi haet deon man eun mar eur twi go han chaeeon che na ni eop eh it seur kkeee reoh ke yak sok eur ha get seo cheoha deur eur pa ra po myeo han peon teo全部: han peon teo mar haet chiee che ggeot choon pi haet teonman eun mar eur twi ro han chaeeon che na ni yeop eh it seur kkeda sin neo hon cha ah nya neo eui kyeot en nae ga it chan ah 不太确定有没有标错唷>"<
要HOT的Candy韩文发音(拼音版歌词或用中文字表示
HOT《Candy》中文歌词2008年01月07日 星期一 22:13今天约你见面时我已准备与你分手骗你说是想了很久其实就是今早的决定(可早晨明媚的阳光改变了一起决定,不是不爱你,现在开始要改变我自己)偷偷的和别的女孩比较你时总是觉得应该放弃矛盾的心情让我哭泣是不是应该离开你可我的心里为何还有你也许只能慢慢的把你淡忘(遥望头顶的天空整理对你的感情,可是越靠近你竟发现我们还站在同一顶天空下)想说的话早已抛在脑后现在只想说爱你我对着天空发誓我会永远和你在一起uc0acuc2e4uc740 uc624ub298 ub108uc640uc758 ub9ccub0a8uc744 uc815ub9acud558uace0 uc2f6uc5b4 ub110 ub9ccub0a0 uac70uc57cuc774ub7f0 ub0a0 uc774ud574ud574 uc5b4ub835uac8c ub9d8 uc815ud55c uac70ub77c ub124uac8c ub9d0ud560 uac70uc9c0ub9ccuc0acuc2e4 uc624ub298 uc544uce68uc5d0 uadf8ub0e5 ub098 uc0dduac01ud55c uac70uc57c ud587uc0b4uc5d0 uc77cuc5b4ub098ubcf4ub2c8 ub108ubb34ub098 ub208ubd80uc154 ubaa8ub4e0 uac8c ub2e4 ubcc0ud55cuac70uc57c ub110 ud5a5ud55cub9c8uc74cub3c4 uadf8ub807uc9c0ub9cc ub110 uc0acub791 uc54aub294uac8c uc544ub0d0 uc774uc81cub294 ub098ub97cubcc0ud654uc2dcud0ac ub54cub2c8uae4c ub108 ubab0ub798 ubab0ub798 ubab0ub798 ub2e4ub978 uc5ecuc790ub4e4uacfc ube44uad50ube44uad50ud588uc9c0 uc790uafb8ub9cc uae68uc5b4uc9c0ub294 ud658uc0c1 uc18duc5d0 ud63cuc790uc11c uc6b8uace0 uc788ub294ucd08ub77cud558uac8c uac07ud600ubc84ub9b0 ub098ub97c ubcf4uc558uc5b4 ub110 ub5a0ub0a0 uac70uc57c uc74c!ud558uc9c0ub9cc uc544uc9c1uae4cuc9c0 uc0acub791ud558ub294 uac78 uadf8ub798 uadf8ub807uc9c0ub9cc ub0b4 ub9d8uc18duc5d0ub108ub97c uc78auc5b4uac08 uac70uc57c uba38ub9ac uc704ub85c ube44uce5c ub0b4 ud558ub298 ubc14ub77cub2e4ubcf4uba70ub110 ud5a5ud55c ub9c8uc74cuc744 uc774uc81cub294 uad73ud614uc9c0ub9cc uc6ecuc77cuc778uc9c0 ub0b4uac8cub2e4uac00uac08uc218ub85d uc6b0ub9b0 uac19uc740 ud558ub298 uc544ub798 uc11c uc788uc5c8uc9c0 ub2e8uc9c0 ub110uc0acub791ud574 uc774ub807uac8c ub9d0ud588uc9c0 uc774uc81cuaecf uc900ube44ud588ub358 ub9ceuc740 ub9d0uc744 ub4a4ub85cud55c ucc44 uc5b8uc81cub098 ub2c8 uc606uc5d0 uc788uc744uaed8 uc774ub807uac8c uc57duc18duc744 ud558uaca0uc5b4 uc800ud558ub298uc744 ubc14ub77cub2e4ubcf4uba70 ub0b4uac8c ud558ub298uc774 uc5f4ub824 uc788uc5b4 uadf8ub798 uadf8ub798ub108ub294 ub0b4 uc55euc5d0 uc11c uc788uace0 uadf8ub798 ub2e4ub978 uc5f0uc778ub4e4uc740 ud0a4uc2a4ub97c ud574ud558uc9c0ub9cc ud56duc0c1 ub098ub294 ub108uc758 ub4a4uc5d0 uc788uc5b4uc57c ub9ccud574 uc774uc81c uadf8ub9ccud574uc74c ub098ub3c4 ub0a8uc794ub370 uc74c ub0b4ub9c8uc74c ub108ub3c4 uc54cuace0 uc788ub294 uac78 uc54cuc544uadf8ub798 uc774uc81c ub098ub3c4 uc9c0uccd0uc11c ud558ub298ub9cc ubc14ub77cubcfcuc218 ubc16uc5d0 ub2e8uc9c0 ub110uc0acub791ud574 uc774ub807uac8c ub9d0ud588uc9c0 uc774uc81cuaecf uc900ube44ud588ub358 ub9ceuc740 ub9d0uc744ub4a4ub85cud55c ucc44 uc5b8uc81cub098 ub2c8 uc606uc5d0 uc788uc744uaed8 uc774ub807uac8c uc57duc18duc744 ud558uaca0uc5b4uc800 ud558ub298uc744 ubc14ub77cubcf4uba70 ud55cubc88ub354 ud55cubc88ub354 ub9d0ud588uc9c0 uc774uc81cuaecfuc900ube44ud588ub358 ub9ceuc740 ub9d0uc744 ub4a4ub85cud55c ucc44 uc5b8uc81cub098 ub2c8 uc606uc5d0 uc788uc744uac8cub2e4uc2e0 ub108ud63cuc790 uc544ub0d0 ub108uc758 uacc1uc5d4 ub0b4uac00 uc788uc796uc544.音译KT: sa shil nan o neur neo wa eui man nam eur cheong ri hago sip eo neor man nir keo ya ee reon nar ee hae haeHJ: eo ryeop ke man cheong han keo ra ne ge mar har keo chi mansa sir o neur ah chim eh geu nyang na saeng kak han keo ya*Chorus 1*KT: haet sir eh ir eo na po ni neo moo na noon poo syeomo deun ke da pyeon han keo ya neor hyang han ma eum toHJ: geu reoh chi man neor sa rang an neun ke ah nyaee che neun na reur pyeon hwa si kir tte ni ggaWH & JW: neo mor rae mor rae mor rae da reun yeo cha deur kwa pi gyo pi gyo haet chicha gyoo man kkae eo chi neun hwan sang sok eh honcha seo oor ko it neun cho ra ha ge kad hyeo peo rin na reur po at seoneor tteo nar keo ya eum! neor tteo nar keo ya eum!HJ: ha chi man ah chik kka chi sa rang ha neun keorgeu rae geu reoh chi man nae mam sok eh neor reur ich eo gar keo ya*Chorus 2*KT: meo ri wi ro pi chin nae ha neur pa ra da po myeoneor hyang han ma eum eur ee che neun koodchyeot chi man wen ir in chi nae ge da da ga gae soo rokoo rin kat eun ha neur ah rae seot it seot chiTY: dan chi neor sa rang hae ee reoh ke mar haet chiee che ggeot choon pi haet teon man eum mar eur twi ro han chaeeon che na ni yeop eh it seur kkehee reoh ke yak sok eur ha geh seo cheoha neur eur pa ra da po myeoHJ: nae geh ha neur ee yeor ryeo it seogeur rae geu rae neo neun rae ap eh seo it kogeu rae da reun yeong in deur eun ki seu reur haeha chi man na neun neo eui wi eh it seo ya man haeWH: ee che geu man hae eumna do nam chin te eumnae ma eum neo do ar ko it neun keor ar ahgeu rae ee che na do chi chyeo seo ha neur man pa ra por soo pakk eh*Chorus 1**Chorus 2*TY: dan chi neor sa rang haeee reoh ke mar haet chiee che kkeot choon pi haet deon man eun mar eur twi go han chaeeon che na ni eop eh it seur kkeee reoh ke yak sok eur ha get seo cheoha deur eur pa ra po myeo han peon teoAll: han peon teo mar haet chiee che ggeot choon pi haet teonman eun mar eur twi ro han chaeeon che na ni yeop eh it seur kkeda sin neo hon cha ah nya neo eui kyeot en nae ga it chan ah
求HOT---Candy的罗马+中文的歌词
[ti:Candy] [00:00.84] Candy [00:06.82] HOT [00:27.46]KT: sa shil nan o neur neowa eui [00:29.25]man nam eur cheong ri ha [00:30.83]go sip eo neor man nir keo ya [00:33.15]ee reon nar ee hae hae [00:35.20]HJ: eo ryeop ke man cheong han keo ra [00:37.04]ne ge mar har keo chi man [00:39.30]sa sir o neur ah chim eh geu [00:41.07]nyang na saeng kak han keo ya [00:42.83]KT: haet sir eh ir eo na po n [00:45.02]neo moo na noon poo syeo [00:46.87]mo deun ke da pyeon han keo ya [00:48.74]neor hyang han ma eum to [00:51.03]HJ: geu reoh chi man neor sa [00:52.78]rang an neun ke ah nya [00:54.50]ee che neun na reur pyeon [00:57.10]hwa si kir tte ni gga [00:59.35]WH & JW: neo mor rae mor rae mor rae da [01:00.43]reun yeo cha deur kwa pi gyo pi gyo haet chi [01:02.91]cha gyoo man kkae eo chi neun hwan sang sok eh hon [01:05.53]cha seo oor ko it neun cho ra ha ge [01:06.35]kad hyeo peo rin na reur po at seo [01:07.46]neor tteo nar keo ya eum! neor tteo nar keo ya eum! [01:09.89]HJ: ha chi man ah chik kka chi sa rang ha neun keor [01:11.48]geu rae geu reoh chi man nae mam [01:13.30]sok eh neor reur ich eo gar keo ya [01:15.08]KT: meo ri wi ro pi chin nae ha [01:16.76]neur pa ra da po myeo [01:18.91]neor hyang han ma eum eur ee che neun kood [01:22.04]chyeot chi man wen ir in chi [01:23.56]nae ge da da ga gae soo rok [01:26.89]oo rin kat eun ha neur ah rae seot it seot chi [01:32.53]TY: dan chi neor sa rang hae ee reoh ke mar haet chi [01:36.79]ee che ggeot choon pi haet teon man [01:36.97]eum mar eur twi ro han chae [01:41.41]eon che na ni yeop eh it seur kkeh [01:44.07]ee reoh ke yak sok eur ha geh seo cheo [01:47.47]ha neur eur pa ra da po myeo [01:51.72] [02:07.77]HJ: nae geh ha neur ee yeor ryeo it seo [02:10.13]geur rae geu rae neo neun rae ap eh seo it ko [02:12.02]geu rae da reun yeong in deur eun ki seu reur hae [02:15.16]ha chi man na neun neo eui wi eh it seo ya man hae [02:23.13]HJ: ha chi man ah chik kka chi sa rang ha neun keor [02:31.23]geu rae geu reoh chi man nae mam [02:35.04]sok eh neor reur ich eo gar keo ya [02:39.21]KT: meo ri wi ro pi chin nae ha [02:41.33]neur pa ra da po myeo [02:43.09]neor hyang han ma eum eur ee che neun kood [02:45.62]chyeot chi man wen ir in chi [02:49.04]nae ge da da ga gae soo rok [02:51.07]oo rin kat eun ha neur ah rae seot it seot chi [02:57.12]TY: dan chi neor sa rang hae ee reoh ke mar haet chi [03:00.95]ee che ggeot choon pi haet teon man [03:04.12]eum mar eur twi ro han chae [03:05.63]eon che na ni yeop eh it seur kkeh [03:08.91]ee reoh ke yak sok eur ha geh seo cheo [03:11.54]ha neur eur pa ra da po myeo [03:13.83]All: han peon teo mar haet chi [03:16.90]ee che ggeot choon pi haet teon [03:19.65]man eun mar eur twi ro han chae [03:21.60]eon che na ni yeop eh it seur kke [03:25.27]da sin neo hon cha ah nya neo [03:28.64]eui kyeot en nae ga it chan ah
求H.O.T-Candy的韩文+罗马发音+中文歌词
韩: uc0acuc2e4uc740 uc624ub298 ub108uc640uc758 ub9ccub0a8uc744 uc815ub9acud558uace0 uc2f6uc5b4 ub110 ub9ccub0a0uac70uc57c uc774ub7f0 ub0a0 uc774ud574ud574 uc5b4ub835uac8c ub9d8 uc815ud55cuac70ub77c ub124uac8c ub9d0ud560uac70uc9c0ub9cc uc0acuc2e4 uc624ub298 uc544uce68uc5d0 uadf8ub0e5 ub098 uc0dduac01ud55cuac70uc57c ud587uc0b4uc5d0 uc77cuc5b4ub098 ubcf4ub2c8 ub108ubb34ub098 ub208ubd80uc154 ubaa8ub4e0uac8c ub2e4 ubcc0ud560uac70uc57c ub110 ud5a5ud55c ub9c8uc74cub3c4 uadf8ub807uc9c0ub9cc ub110 uc0acub791uc54aub294uac8c uc544ub0d0 uc774uc81cub294 ub098ub97c ubcc0ud654uc2dcud0acud14cub2c8uae4c ub108 ubab0ub798ubab0ub798ubab0ub798 ub2e4ub978 uc5ecuc790ub4e4uacfc ube44uad50 ube44uad50ud588uc9c0 uc790uafb8ub9cc uae68uc5b4uc9c0ub294 ud658uc0c1uc18duc5d0 ud63cuc790uc11c uc6b8uace0 uc788ub294 ucd08ub77cud558uac8c uac07ud600ubc84ub9b0 ub098ub97c ubcf4uc558uc5b4 ub110 ub5a0ub0a0uaebcuc57c uc74c! ub110 ub5a0ub0a0uaebcuc57c uc74c! ud558uc9c0ub9cc uc544uc9c1uae4cuc9c0 uc0acub791ud558ub294uac78 uadf8ub798 uadf8ub807uc9c0ub9cc ub0b4 ub9d8 uc18duc5d0 ub108ub97c uc78auc5b4uac08uaebcuc57c uba38ub9ac uc704ub85c ube44uce5c ub0b4 ud558ub298 ubc14ub77cub2e4ubcf4uba70 ub110 ud5a5ud55c ub9c8uc74cuc744 uc774uc81cub294 uad73ud614uc9c0ub9cc uc660uc77cuc778uc9c0 ub124uac8c ub354 ub2e4uac00uac08uc218ub85d uc6b0ub9b0 uac19uc740 ud558ub298uc744 uc544ub798uc11c uc788uc5c8uc9c0 ub2e8uc9c0 ub110 uc0acub791ud574 uc774ub807uac8c ub9d0ud588uc9c0 uc774uc81cuaecf uc900ube44ud588ub358 ub9ceuc740 ub9d0uc744 ub4a4ub85cud55cucc44 uc5b8uc81cub098 ub2c8 uc606uc5d0 uc788uc744uac8c uc774ub807uac8c uc57duc18duc744 ud558uaca0uc5b4 uc800ud558ub298uc744 ubc14ub77cub2e4ubcf4uba70 ub0b4uac8c ud558ub298uc774 uc5f4ub824 uc788uc5b4 uadf8ub798 uadf8ub798 ub108ub294 ub0b4 uc55euc5d0uc11c uc788uace0 uadf8ub798 ub2e4ub978 uc5f0uc778ub4e4uc740 ud0a4uc2a4ub97c ud574 ud558uc9c0ub9cc ud56duc0c1 ub098ub294 ub108uc758 ub4a4uc5d0 uc788uc5b4uc57cub9cc ud574 uc774uc81c uadf8ub9ccud574 uc74c ub098ub3c4 ub0a8uc794ub370 uc74c ub0b4 ub9c8uc74c ub108ub3c4 uc54cuace0 uc788ub294uac78 uc54cuc544 uadf8ub798 uc774uc81c ub098ub3c4 uc9c0uccd0uc11c ud558ub298ub9cc ubc14ub77cubcfc uc218 ubc16uc5d0 ud587uc0b4uc5d0 uc77cuc5b4ub098 ubcf4ub2c8 ub108ubb34ub098 ub208ubd80uc154 ubaa8ub4e0uac8c ub2e4 ubcc0ud560uac70uc57c ub110 ud5a5ud55c ub9c8uc74cub3c4 uadf8ub807uc9c0ub9cc ub110 uc0acub791uc54aub294uac8c uc544ub0d0 uc774uc81cub294 ub098ub97c ubcc0ud654uc2dcud0acud14cub2c8uae4c uba38ub9ac uc704ub85c ube44uce5c ub0b4 ud558ub298 ubc14ub77cub2e4ubcf4uba70 ub110 ud5a5ud55c ub9c8uc74cuc744 uc774uc81cub294 uad73ud614uc9c0ub9cc uc660uc77cuc778uc9c0 ub124uac8c ub354 ub2e4uac00uac08uc218ub85d uc6b0ub9b0 uac19uc740 ud558ub298uc744 uc544ub798uc11c uc788uc5c8uc9c0 ub2e8uc9c0 ub110 uc0acub791ud574 uc774ub807uac8c ub9d0ud588uc9c0 uc774uc81cuaecf uc900ube44ud588ub358 ub9ceuc740 ub9d0uc744 ub4a4ub85cud55cucc44 uc5b8uc81cub098 ub2c8 uc606uc5d0 uc788uc744uac8c uc774ub807uac8c uc57duc18duc744 ud558uaca0uc5b4 uc800 ud558ub298uc744 ubc14ub77cub2e4ubcf4uba70 ud55cubc88 ub354 ud55cubc88 ub354 ub9d0ud588uc9c0 uc774uc81cuaecf uc900ube44ud588ub358 ub9ceuc740ub9d0uc744 ub4a4ub85cud55c ucc44 uc5b8uc81cub098 ub2c8 uc606uc5d0 uc788uc744uac8c ub2e4uc2e0 ub108 ud63cuc790 uc544ub0d0 ub108uc758 uacc1uc5d4 ub0b4uac00 uc788uc796uc544 中: 其实今天想要整理和你的感情 想去找你 请了解我这样的心 我要告诉你 说是想了很久的心情 其实只是忽然的决定 清晨阳光多么明媚 一切都改变 连对你的心也一样 但我并不是不爱你 只不过是想改变我自己罢了 我把你与其他女孩比较 在总想放弃的矛盾心情中 我一直不断的哭泣 发现自己非常可怜 想要离开你 想要离开你 可是我心里还是爱你 也许我要开始慢慢的把你忘记 看着头顶上属于我的天空 弄明白自己对你的想法 但是当我慢慢靠近你 发现你我原本是在同一个天空下 此刻我只想说爱你 抛开我之前一直准备的那些话题 我要永远陪在你身边 看着你我的天空 我发誓 我的天空已经敞开 你就在我的眼前 其他的情侣们在亲吻 可我总是站在你的后面 不要啦 我也是个男生 我的心你应该也懂 现在我也累了 只能望着我的天空 我要再说一遍 抛开我之前一直准备的那些话题 我要永远陪在你身边 你不会是一个人 因为我会陪在你身边 音: sa shil nan o neur neo wa eui man nam eur cheong ri ha go sip eo neor man nir keo ya ee reon nar ee hae hae eo ryeop ke man cheong han keo ra ne ge mar har keo chi man sa sir o neur ah chim eh geu nyang na saeng kak han keo ya *Chorus 1* haet sir eh ir eo na po ni neo moo na noon poo syeo mo deun ke da pyeon han keo ya neor hyang han ma eum to geu reoh chi man neor sa rang an neun ke ah nya ee che neun na reur pyeon hwa si kir tte ni gga WH & neo mor rae mor rae mor rae da reun yeo cha deur kwa pi gyo pi gyo haet chi cha gyoo man kkae eo chi neun hwan sang sok eh hon cha seo oor ko it neun cho ra ha ge kad hyeo peo rin na reur po at seo neor tteo nar keo ya eum! neor tteo nar keo ya eum! ha chi man ah chik kka chi sa rang ha neun keor geu rae geu reoh chi man nae mam sok eh neor reur ich eo gar keo ya *Chorus 2* meo ri wi ro pi chin nae ha neur pa ra da po myeo neor hyang han ma eum eur ee che neun kood chyeot chi man wen ir in chi nae ge da da ga gae soo rok oo rin kat eun ha neur ah rae seot it seot chi dan chi neor sa rang hae ee reoh ke mar haet chi ee che ggeot choon pi haet teon man eum mar eur twi ro han chae eon che na ni yeop eh it seur kkeh ee reoh ke yak sok eur ha geh seo cheo ha neur eur pa ra da po myeo nae geh ha neur ee yeor ryeo it seo geur rae geu rae neo neun rae ap eh seo it ko geu rae da reun yeong in deur eun ki seu reur hae ha chi man na neun neo eui wi eh it seo ya man hae ee che geu man hae eum na do nam chin te eum nae ma eum neo do ar ko it neun keor ar ah geu rae ee che na do chi chyeo seo ha neur man pa ra por soo pakk eh *Chorus 1* *Chorus 2* TY: dan chi neor sa rang hae ee reoh ke mar haet chi ee che kkeot choon pi haet deon man eun mar eur twi go han chae eon che na ni eop eh it seur kke ee reoh ke yak sok eur ha get seo cheo ha deur eur pa ra po myeo han peon teo han peon teo mar haet chi ee che ggeot choon pi haet teon man eun mar eur twi ro han chae eon che na ni yeop eh it seur kke da sin neo hon cha ah nya neo eui kyeot en nae ga it chan ah