Android中为什么Activity的this指针值为ActivityThread而不是类名
publicInputStreamgetFile()throwsIOException{InputStreamtxt=null;if(Environment.getExt...
public InputStream getFile() throws IOException{
InputStream txt = null; if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { try { txt = new FileInputStream(Environment.getExternalStorageDirectory().getCanonicalPath() + FileName); } catch (FileNotFoundException e) { txt = getResources().openRawResource(R.raw.text); e.printStackTrace(); } catch (IOException e) { txt = getResources().openRawResource(R.raw.text); e.printStackTrace(); } } else { txt = getResources().openRawResource(R.raw.text); } Resources rs = this.getResources(); txt = rs.openRawResource(R.raw.text); return txt; }
这一段通过单步调试this值为ActivityThread (id=830007763072)
但其它类里的this值就为类名 展开
InputStream txt = null; if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { try { txt = new FileInputStream(Environment.getExternalStorageDirectory().getCanonicalPath() + FileName); } catch (FileNotFoundException e) { txt = getResources().openRawResource(R.raw.text); e.printStackTrace(); } catch (IOException e) { txt = getResources().openRawResource(R.raw.text); e.printStackTrace(); } } else { txt = getResources().openRawResource(R.raw.text); } Resources rs = this.getResources(); txt = rs.openRawResource(R.raw.text); return txt; }
这一段通过单步调试this值为ActivityThread (id=830007763072)
但其它类里的this值就为类名 展开
2个回答
展开全部
因为实现机制就是这样的,看下底层实现的话就会知道了。
我也是做app的,但是现在在做framework层,就必须了解底层实现,每个activity都是运行于一个ActivityThread中的,ActivityThread又叫主线程或者ui线程,相当于一个程序的main()函数入口,主要处理界面的相关事件以及广播等,然后实现了IApplicationThread接口,实现调度avtivities和broadcast等。默认情况下,所有activity和service等都运行于这个主线程中,也正式因为这样,所以为了避免anr常常要开启线程来进行任务。
我也是做app的,但是现在在做framework层,就必须了解底层实现,每个activity都是运行于一个ActivityThread中的,ActivityThread又叫主线程或者ui线程,相当于一个程序的main()函数入口,主要处理界面的相关事件以及广播等,然后实现了IApplicationThread接口,实现调度avtivities和broadcast等。默认情况下,所有activity和service等都运行于这个主线程中,也正式因为这样,所以为了避免anr常常要开启线程来进行任务。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询