159 消息 , 由 ActivityThread 中的内部类 H 处理该消息 ; 从 Binder 调用 ActivityThread 开始 , 就进入了主线程阶段开始执行 , 这里开始在主线程中创建...ClientTransactionHandler.java ; 二、ActivityThread.H 处理 EXECUTE_TRANSACTION 消息 ---- 在 ActivityThread 的 H 内部类中...mTransactionExecutor.execute(transaction); if (isSystem()) { // 系统进程内的客户端事务在客户端而不是...executeCallbacks 方法 , 在该方法中从 ClientTransaction 获取 ClientTransactionItem 集合 , 最终调用 了 ClientTransactionItem...@VisibleForTesting public void executeCallbacks(ClientTransaction transaction) { // 从
local.properties 里的 sdk.dir 路径,由此即可拼接出 android.jar 的路径,以此拿到 Android SDK 源码,读取到的路径如下: SDK_DIR/platforms/android...-$compileSdkVersion/android.jar 2、Java 源码不是很好拿到,从 jdk9 开始,已经没有 rt.jar 了,具体可以查看 oracle 关于 Removed rt.jar...2、检查 class 文件引用外部类的情况 一个类引用到其他类的几种情况: 注解:类、字段、方法、参数使用注解去描述的情况 字段:使用类去申明的字段,基础类型忽略 方法:方法 Code 里涉及到的外部类字段...、方法的调用 接口 父类 我们在遍历所有参与编译依赖的 Class 文件时(Android、java 源码不参与遍历),即可通过这些情况去分析引用情况。...这里有一个细节点,在方法 Code 中的字段与方法调用,在 owner 找不到的情况还要继续从他的父类与接口继续查找,因为调用的字段与方法有可能在父类。
的oncreate()方法中被调用,以及onGetInitialHeader()方法,也是在PreferenceActivity的oncreate方法中被调用 @Override public...} getListView().setSelectionFromTop(0, 0); } } (7)Settings.java中的内部类...,Settings.java中有好多实现的内部类 。。。。。。...这些内部类是为了加载那些fragment,作为fragment的宿主,可以从Androidmanifest.xml中看到,从其他快捷方式进入某个单独的设置模块时借助这些内部类来加载。...比如可以创建蓝牙快捷方式,以及状态栏进入蓝牙时需要借助这些内部类来加载那些fragment。
方法1 避免在内部类中访问外部类的私有方法/变量 当在Java内部类(包括内部匿名类)中访问外部类的私有方法/变量时,编译器会生成额外的方法,这也会增加方法数,建议编码时尽量避免。...privatevoid doStuff(int value){ System.out.println("Value is "+ value); } } 虽然Java语言允许内部类直接访问外部类的方法...方法2 避免调用派生类中的未被覆盖(override)的方法 考虑下面的代码 publicclass DemoActivity extends Activity { @Override...因为按照java的语义,如果有覆盖父类的方法,则会直接调用覆盖的方法。...; Method: onCreate (Landroid/os/Bundle;)V Method: setContentView (I)V 解决办法: 对于不需要被override的方法,显式的改成调用父类的方法
以便确定返回的数据是从哪个Activity中返回 代码写在旧窗体,在旧窗体里new 2个Intent(目的窗体时2个不同的新窗体),requestCode用来区分是向哪个新窗体传消息,当离开旧窗体切换到新窗体时消息显示在新窗体中...setResult(int resultCode, Intent data) 调用这个方法把Activity想要返回的数据返回到父Activity 第一个参数:当Activity结束时resultCode...,是以便确认返回的数据是从哪个Activity返回的。...Started Service中使用StartService()方法来进行方法的调用,调用者和服务之间没有联系,即使调用者退出了,服务依然在进行【onCreate()- >onStartCommand...在Service中需要创建一个实现IBinder的内部类(这个内部类不一定在Service中实现,但必须在Service中创建它)。
新建一个AlipayService继承系统Service 在清单文件里面,添加一个节点,为了能够让别人调用,添加一个隐式意图 添加一个意图过滤器intent-filter>节点,新加一个动作节点...name=”com.xxx.alipay” 重写方法 onBind() onUnbind() onCreate() onDestroy() 定义一个接口IService,添加一个想要暴露的方法 定义一个内部类...Stub,ISerivice.Stub 这时远程的代码才真正完成 客户端的代码里 获取Intent对象,通过new出来 调用Intent对象的setAction()方法,参数:上面远程端定义的意图过滤器动作...调用bindService(intent,conn,flags)方法,绑定服务,参数:Intent对象,ServiceConnection对象,BIND_AUTO_CREATE 创建一个内部类MyConn...中间人调用服务的方法
1.自定义Handler时如何避免内存泄漏 答案: 一般非静态内部类持有外部类的引用的情况下,造成外部类在使用完成后不能被系统回收内存,从而造成内存泄漏。...为了避免这个问题,我们可以自定义的Handler声明为静态内部类形式,然后通过弱引用的方式,让Handler持有外部类的引用,从而可避免内存泄漏问题。...,仍然调用的是onCreate方法 以下是代码实例 1.设置MainActivity的启动模式为SingleTask(栈内复用) <activity android:name=".MainActivity...当用户触发了输入事件(如键盘输入,点击按钮等),如果应用5秒内没有响应用户的输入事件,那么,Android会认为该应用无响应,便弹出ANR对话框。而弹出ANR异常,也主要是为了提升用户体验。...4.尽量不要在Activity中使用非静态内部类,因为非静态内部类会隐式持有外部类实例的引用,当非静态内部类的引用的声明周期长于Activity的声明周期时,会导致Activity无法被GC正常回收掉。
map.get(c); } if (sd == null) { //ServiceDispatcher是LoadedApk的内部类...map中读取是否已经存在ServiceDispatcher实例,如果没有就会去创建一个,注意ServiceDispatcher是LoadedApk的内部类,而ServiceDispatcher里还有一个内部类...= null) { //根据token获取ActivityRecord,也就是获取调用bindService()的那个Activity //这一步就是从任务栈中去查找...= null && b.intent.received) { try { //这里开始就是调用了InnerConnection的connected...,不再赘述,总之,它最后就调用了我们的MainActivity中定义的MyServiceConnection的onServiceConnected()方法,这个b.intent.binder就是远程的对象即
Activity的启动过程 app启动的过程有两种情况,第一种是从桌面launcher上点击相应的应用图标,第二种是在activity中通过调用startActivity来启动一个新的activity。...从顶层父View向子View递归调用 layout 方法的过程,即父View根据上一步 measure 得到的布局大小和布局参数,将子View放在合适的位置上。 第三步:onDraw 绘制视图。...通过将要传递的消息放在Message中,Handler通过 sendMessage 方法将消息放入 MessageQueue 中,Looper 对象会不断的调用loop() 方法不断从 MessageQueue...,就不会持有外部类的引用,其生命周期就跟外部类无关。...产生的原因: 5s内无法响应用户输入事件 广播在10s内无法结束 Service在20s内无法结束 总结 最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的
= new Intent(MainActivity.this, MyService.class); /* * 这里调用了...当这个服务启动之后,我们是无法对其进行具体的操作的,什么意思呢,就是我们启动了这个服务之后,这个服务就去做自己的事情了,我们无法知道服务在做什么事情,或者是做的事情的进度是多少了,我们只能启动和结束这个服务,从某些方面来说...* 一般我们会新建一个内部类继承于 Binder 类,一般我们会把要执行的逻辑放在这个 * 当 onBinder 方法被调用的时候,我们就可以返回这个类的实例化对象, * 这里说一下...* 之后我们可以在Activity 中可以通过得到的这个内部类的引用来获取我们正在做的事情的信息, * 并且可以通过这个内部类提供的方法加以控制,这样就实现了 Service 和绑定的...class MyTask extends Binder { // 自定义的内部类来完成对应功能 } } 那么在这里 onBind 方法就是主角了。
onDestory()方法,服务被销毁的时候调用 开启服务 获取intent对象,new Intent(this,PhoneService.class),参数:上下文,字节码 调用上下文对象的startService...(intent),参数:intent对象 在服务的onCreate()方法里,执行一些长期操作 获取TelephoneyManager对象,调用getSystemService(TELEPHONY_SERVICE...)方法 调用TelephoneyManager对象的listen(istener,events)方法,监听手机通话状态,参数: PhoneStateListener对象,使用内部类类继承一下,要重写一些方法...PhoneStateListener.LISTEN_CALL_STATE 新建一个内部类MyPhoneStateListener继承PhoneStateListener, 重写方法onCallStateChanged...tm.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE); } //内部类
@Override public void onClick(View arg0) { Intent intent = new Intent(SecondActivity.this...intent = new Intent(SecondActivity.this,MainActivity.class); startActivity(intent); }...1、使用内部类可以在当前类中复用监听器类,因为监听器类是外部类内部类的两个优势。上面代码就是内部类的形式!...static final String TAG = "YES"; @Override public void onClick(View arg0) { Log.i(TAG,"调用外部类...clickhandle函数 private static final string TAG = "begin" public void clickhandle(View source){ Log.i(TAG,"调用标签进行监听事件
利用广播调用服务里面的方法,间接的方式调用服务内部的方法,与现实中差不多,请媒体曝光 主界面里面 在界面创建的时候开启一下服务普通的startService()方法 发送一条广播出去 获取Intent对象...,通过new出来 调用Intent对象的setAction()方法,参数:一般就是包名 调用sendBroadcast(intebt)方法,发送广播,参数:Intent对象 服务里面 新建一个MyService...类继承系统的Service类 添加一个自定义的服务的方法callServiceMethod(),我们目的要调用的方法 新建一个内部类MyReceiver继承系统的Receiver类 广播接收者既能通过清单文件注册...intent=new Intent(this,MyService.class); startService(intent); } //广播调用服务 public...", 0).show(); } //内部类实现广播接收者 private class MyReceiver extends BroadcastReceiver{
AMS 进程相关源码 | 主进程相关源码 ) 两篇博客中 , 分析了 Activity 的启动流程 , 在当前应用主进程中 , 在 Activity 中执行 startActivity 方法 , 然后调用...* @param intent The actual Intent to start....am; } }; IActivityManager 是 Binder 的 Proxy , Binder 下存在 Stub 和 Proxy 两个内部类..., Binder 生成的 Java 类时内部生成上述 Stub 和 Proxy 两个内部类 ; 反射的时候 , 反射 final IActivityManager am = IActivityManager.Stub.asInterface...(b); 对象 , 最终调用 startActivity 的是 IActivityManager , 使用占坑的 Activity 隐瞒 IActivityManager , 实际上启动我们从插件包中加载的
对象的prepare()方法,准备 调用MediaRecorder对象的start()方法,开始 调用MediaRecorder对象的stop()方法,停止 调用MediaRecorder对象的reset...开启服务 获取Intent对象,new Intent(this,PhoneService.class),参数:上下文,字节码 调用startService(intent)方法,参数:Intent对象...关闭服务 获取Intent对象,new Intent(this,PhoneService.class),参数:上下文,字节码 调用stopService(intent)方法,参数:Intent对象 在应用管理器手工停止服务...服务放生命周期 onCreate() ==> onStartCommand() ==> onStart() ==> onDestory() 服务只会被执行一次,如果多次调用,会从onStartCommand...tm.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE); } // 内部类
Android帮助文档 android.bluetooth www.pinnace.cn/bluetooth/tech/1940.shtml 此示例代码中有错: 在DeviceControlActivity类内:...onConnectionStateChange中把连接状态放到Intent中用广播sendBroadcast(intent)的方式告知本界面中 异步调用就是你 喊 你朋友吃饭 ,你朋友说知道了 ,待会忙完去找你...bindService是异步调用和Service进行绑定, 如果绑定成功, 则会调用ServiceConnection的onServiceConnected。...在Service中需要创建一个实现IBinder的内部类(这个内部类不一定在Service中实现,但必须在Service中创建它)。...Intent intent = new Intent(MainActivity.this,BindService.class),bindService(intent, conn, Context.BIND_AUTO_CREATE
对象,conn是ServiceConnection对象中间人不能为空,选项BIND_AUTO_CREATE,如果不存在就创建 ServiceConnection类是个接口,创建一个内部类MyConn实现这个接口...IBinder对象 在onServiceConnected()回调方法里成功绑定以后会得到一个IBInder对象 因为IBinder类是一个接口,因此在SingService里面创建一个公共内部类,MyBinder...继承一个实现类Binder,自定义方法callChangeSing(String name),在这个方法里面调用外部类SingServic的changeSing方法。...intent = new Intent(this, SingService.class); bindService(intent, new MyConn(), BIND_AUTO_CREATE...public class MyIBinder extends Binder{ public void callChangeSing(String song){ //调用外部类的方法
它是一个抽象类,由Android系统提供它的具体实现类,它拥有访问应用程序内特定的资源和类的权限,以及应用程序级操作,例如启动activity、广播和接收intent等。...从研发的角度来理解: Context是一个抽象类,我们通过这个Context可以访问包内的资源(res和assets)和启动其他组件(activity、service、broadcast)以及系统服务...(三)、内部类或者匿名内部类导致内存泄露 1、问题 内部类(匿名内部类其实也是内部类的一种)会持有外部类的引用,当内部类进行延时操作的时候,如果外部类是Activity,则在执行ondestroy后,...并不会销毁,从而导致内存泄露 什么是"内部类持有外部类引用?"...:静态内部类+弱引用 因为仅仅改为静态内部类,我们会发现不能调用外部类的方法,所以我们加上弱引用,这样就可以调用外部类的方法了。
ResourceTable.Id_but1); //this:本类的对象,指:MainAbilitySlice(子界面对象) // 在子界面当中,通过 id 找到对应的组件 // 用this去调用方法...改动第一个案例中的代码:添加Text文本框 [在这里插入图片描述] [在这里插入图片描述] 上面的 onStart 方法中 text1 是局部变量,如果用第一种方法(自己编写实现类)来写, MyListener 不能调用到...匿名内部类 采用匿名内部类就不需要实现 implement ClickedListener 接口,也不需要再新建一个类了 但使用匿名内部类的代码只能使用一次。...当使用代码需要用一次的时候,可以采用匿名内部类的形式来简化代码 直接 new ClickedListener 就能实现了,然后把第一种实现方式(自己编写实现类)中的 onClick 拿过来或第二种方式(...方法引用 这个方法的形参和方法的返回值类型需要跟接口里的抽象方法里的形参和返回值类型要保持一致 代码实现,布局代码不变跟匿名内部类的一致,改动如下: 直接编写 onClick 方法,不带 @Override