Android开发 四大组件是否运行在主线程中?
来源:互联网 发布:知乎 国开博裕和博裕 编辑:程序博客网 时间:2024/06/06 02:57
Android的四大组件是不是运行在主线程中?打了log,做个笔记.
先上图:
图没有说服力,因为log是我写的.哈哈.
1.activity
在onCreate()里面打印当前的线程的id和name
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);startService = (Button) findViewById(R.id.startService);startService.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubLog.e("test", "开启服务.....");startService(new Intent(MainActivity.this, MyService.class));}});sendBroadcast = (Button) findViewById(R.id.sendBroadcast);sendBroadcast.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Log.e("test", "发送广播.....");Intent intent = new Intent();intent.setAction("com.dingzhipeng");intent.putExtra("name", "dingzhipeng");MainActivity.this.sendBroadcast(intent);}});String threaName = Thread.currentThread().getName();long threaId = Thread.currentThread().getId();Log.e("test", "activity...");Log.e("test", "activity_threadId: " + threaId);Log.e("test", "activity_threadName: " + threaName);}
2.Service
同上,在onCreate()里面打印当前的线程的id和name
public class MyService extends Service {@Overridepublic IBinder onBind(Intent arg0) {// TODO Auto-generated method stubreturn null;}@Overridepublic void onCreate() {super.onCreate();String threaName = Thread.currentThread().getName();long threaId = Thread.currentThread().getId();Log.e("test", "service_threadId: " + threaId);Log.e("test", "service_threadName: " + threaName);}}
manifest.xml中记得配置.log也是简单暴力
public class MyProvider extends ContentProvider {@Overridepublic int delete(Uri uri, String selection, String[] selectionArgs) {// TODO Auto-generated method stubreturn 0;}@Overridepublic String getType(Uri uri) {// TODO Auto-generated method stubreturn null;}@Overridepublic Uri insert(Uri uri, ContentValues values) {// TODO Auto-generated method stubreturn null;}@Overridepublic boolean onCreate() {String threaName = Thread.currentThread().getName();long threaId = Thread.currentThread().getId();Log.e("test", "内容提供者...");Log.e("test", "ContentProvider_threadId: " + threaId);Log.e("test", "ContentProvider_threadName: " + threaName);return false;}@Overridepublic Cursor query(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder) {// TODO Auto-generated method stubreturn null;}@Overridepublic int update(Uri uri, ContentValues values, String selection,String[] selectionArgs) {// TODO Auto-generated method stubreturn 0;}}
在广播接收者中打log
public class MyReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context arg0, Intent arg1) {String name = arg1.getExtras().getString("name");Log.e("test", "接收到name: " + name);String threaName = Thread.currentThread().getName();long threaId = Thread.currentThread().getId();Log.e("test", "BroadcastReceiver_threadId: " + threaId);Log.e("test", "BroadcastReceiver_threadName: " + threaName);}}
总结:在activity,service,contentprovider的oncreate()中打印log,获取的当前线程都是主线程,在broadcastreceiver的onReceiver()中当前线程也是主线程,四大组件都是运行在主线程中.
demo源码下载
我的博客:http://blog.csdn.net/qq_31383345
欢迎批评!
0 0
- Android开发 四大组件是否运行在主线程中?
- android 判断app是否运行在主线程中
- android之postDelayed是否运行在主线程中解答
- android Toast运行在主线程中
- android之timer和timertask是否运行在主线程中解答
- android在主线程运行
- Android四大组件运行
- Android判断是否在主线程
- Handler.postDelayed(new Runnable)是否运行在主线程
- Handler.postDelayed(new Runnable)是否运行在主线程
- Android开发四大组件
- Android开发四大组件
- Android开发,四大组件
- Android开发四大组件
- Android开发四大组件
- Android开发四大组件
- Android中四大组件
- Android中四大组件
- Swift3 String.Index 字符串截取
- 编译作业——LR文法的语法分析器
- CSAPP第十二章读书笔记
- spring jdbc
- log4j 写入DB 是不存在单引号的问题的!大家不要被不知所以然的家伙骗!
- Android开发 四大组件是否运行在主线程中?
- memcpy和memmove的区别
- networkD3包
- Spring源码分析之ioc容器第二天之oC容器在Web容器中的启动
- 在ec2上部署spark-部署成功后无法启动
- hibernate初探之单向一对多映射
- LayoutInflate源码分析之如何解析视图树
- android实现应用程序前台和后台之间转换的监听的两种方式
- 特征工程--笔记