您的位置:首页 > 科技 > IT业 > 重庆小程序开发_怎么进入微信官方网站_搜索引擎的工作原理分为_seo黑帽优化

重庆小程序开发_怎么进入微信官方网站_搜索引擎的工作原理分为_seo黑帽优化

2025/1/7 18:31:32 来源:https://blog.csdn.net/soarfeng/article/details/144935260  浏览:    关键词:重庆小程序开发_怎么进入微信官方网站_搜索引擎的工作原理分为_seo黑帽优化
重庆小程序开发_怎么进入微信官方网站_搜索引擎的工作原理分为_seo黑帽优化

目录

4、 细说主线程(UI线程)的角色

近程通信

远程通信


4、 细说主线程(UI线程)的角色

近程通信
  • 在Android里,无论组件在那一个进程里执行,于预设情形下,他们都是由该进程里的主线程来负责执行之。
  • 例如下述的范例,由一个Activity启动一个Service,两者都在同一个进程里执行。此时,两者都是由主线程负责执行的。如下图所示:
// ac01.java
//……
public class ac01 extends Activity implements OnClickListener {private Button btn, btn2;public void onCreate(Bundle icicle) {super.onCreate(icicle);LinearLayout layout = new LinearLayout(this);layout.setOrientation(LinearLayout.VERTICAL);btn = new Button(this); btn.setId(101);btn.setText("run service");btn.setBackgroundResource(R.drawable.heart);btn.setOnClickListener(this);LinearLayout.LayoutParams param= new LinearLayout.LayoutParams(135, 50);param.topMargin = 10; layout.addView(btn, param);btn2 = new Button(this); btn2.setId(102);btn2.setText("Exit");btn2.setBackgroundResource(R.drawable.heart);btn2.setOnClickListener(this);layout.addView(btn2, param);setContentView(layout);//---------------------------------------Thread.currentThread().setName(Thread.currentThread().getName()+"-ac01");}public void onClick(View v) {switch (v.getId()) {case 101:this.startService(new Intent(this, myService.class));break;case 102:finish(); break;}}
}// myService.java
//……..
public class myService extends Service {@Override public void onCreate(){Thread.currentThread().setName(Thread.currentThread().getName() + "-myService");Toast.makeText(this, Thread.currentThread().getName(),Toast.LENGTH_SHORT).show();}@Override public IBinder onBind(Intent intent){ return null; }
}
  • 主线程先执行ac01的onCreate()函数,然后,继续执行myService的onCreate()函数。于是,输出了主线程的执行轨迹纪录:

       

  • 除了上述的Activity和Service之外,还有BroadcastReceiver也是一样,是由主线程来执行的。例如,由一个Activity启动一个BroadcastReceiver,两者都在同一个进程里执行。此时,两者都是由主线程负责执行的。如下图所示

 

// ac01.java
// …….
public class ac01 extends Activity implements OnClickListener {//…….public void onCreate(Bundle icicle) {//………Thread.currentThread().setName(Thread.currentThread().getName()+"-ac01");}public void onClick(View v) {switch (v.getId()) {case 101:Intent in = new Intent(MY_EVENT);this.sendBroadcast(in); break;case 102: finish(); break;}}
}// myReceiver.java
//……..
public class myReceiver extends BroadcastReceiver {@Override public void onReceive(Context context, Intent intent){Thread.currentThread().setName(Thread.currentThread().getName() + "-myReceiver");Toast.makeText(context,Thread.currentThread().getName(),Toast.LENGTH_SHORT).show();}
}
  • 主线程先执行myActivity的onCreate()函数,之后继续执行myReceiver的onReceive()函数。于是输出了主线程执行的轨迹纪录:
远程通信
  • 如果Activity、 Service和BroadcastReceiver三者并不是在同一个进程里执行时,它们之间的通讯就是跨进程通讯(IPC)了。
  • 请先看个范例,它由一个Activity启动一个远距的Service,两者分别在不同的进程里执行,如下图所示:
  • 当Activity与Service(或BroadcastReceiver)之间采用IPC通讯时,意味着两者分别在不同的进程里执行。此时, 于预设情形下,Activity、 BroadcastReceiver或Service都是由其所属进程里的主线程负责执行之。
  • Android核心的Binder System从” remote”进程的线程池里,启动一个线程(名
    为” Binder Thread #1”)来执行myBinder的onTransact()函数。
  • 依据Binder System的同步(Synchronization)的机制,主线程会等待
    Binder Thread #1线程执行完毕,才会继续执行下去。
     

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com