首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

笔记——Android零碎知识摘录(一)

Integer是int的封装类,里面有很多进行处理的静态方法 Integer是对象而int不是,内存的分配位置也不一样 Integer的属性和其他类一样的,在方法里都是引用传递;而基本类型int是值传递...3、java反射:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为...即:java在运行状态中反射知道一个类里面的所有方法和属性;通过反射获得对象后,能够调用对象的任意属性和方法。...>2、sendMessage():调用handler.sendMessage()等方法发送消息,在其内部源码中都会调用enqueueMessage(MessageQueue queue, Message...一样用在定义引用变量中,但是传值范围不一样 T和?运用的地方有点不同,?是定义在引用变量上,T是类上或方法上;如果有泛型方法和非泛型方法,都满足条件,会执行非泛型方法。

40420

【Android】Handler 使用

如果Bundle对象不存在返回null。 public Bundle getData():获取附加在此事件上的任意数据的Bundle对象,需要时延迟创建。...0x15 handleMessage方法 handleMessage方法用于接收Message对象并进行相应的处理,对应Handler的sendMessage方法。...使用时应在handler中重写此方法。当在其他线程调用sendMessage方法时,handleMessage方法便会被回调,并携带sendMessage方法调用者在Message中存入的信息。...当我们想要在其他线程更新UI时,就可以用主线程中创建的Handler调用sendMessage方法,然后在该Handler重写的handleMessage方法中做相应的处理。...解决方法 可以在外部新建一个类,这样便可解决这个问题。但这样无疑过于麻烦了,内部类更方便些。 可以同时使用静态内部类和弱引用,当一个对象只被弱引用依赖时它便可以被GC回收。

94820
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Handler面试八问

    线程启动之后,进入main()方法,在main()方法中进行线程的一些初始化,初始化工作完成之后,会调用Looper.loop()进行消息监听,而loop()方法是一个死循环,从而保证线程不会立即退出:...而sendMessage发送的就是一个封装好的Message对象,该消息的callback一般是空的,在dispatchMessage的时候,因为callabck为空,所以分发消息的优先级比较低,是通过执行...Message的target变量(target其实就是Handler对象自己)的handleMessage()方法执行任务的,所以我们在使用Handler的sendMessage()方法发送消息的时候,...obtain()方法可以从全局消息池中获得一个空的Message对象,这样可以有效的减少Message对象创建时消耗的系统资源。...如何在子线程中弹窗Toast 在子线程中调用Looper.prepare()方法,并调用Looper.loop()方法,这样就会在子线程中创建一个Looper对象和MessageQueue消息队列,而loop

    1.2K20

    【Android 异步操作】手写 Handler ( 总结 | Message | MessageQueue | Looper | Handler ) ★

    Looper , 如果 Looper 为空 , Handler 初始化就会失败 ; 因此在 创建 Handler 之前 , 必须先调用 Looper 的 prepare 方法 , 先将 Looper..., 可以通过线程调用 ThreadLocal 变量的 get 方法获取该线程对应的对象副本 , 调用 ThreadLocal 变量的 set 方法 , 设置该线程对应类型的对象副本 ; Looper...调用 prepare 方法进行初始化 , 在该方法中处理 线程本地变量的先关初始化与设置 , 如果之前已经初始化过 , 本次调用 prepare 方法是第二次调用 , 则会 抛出异常 , 如果之前没有初始化过..., 那么创建一个 Looper , 然后调用线程本地变量 ThreadLocal 的 set 方法 , 将该 Looper 对象设置成线程本地变量 ; /** * 一个线程只能有一个...ThreadLocal 变量获取 : 调用 ThreadLocal 变量的 get() 方法 , 可以获取该 ThreadLocal 线程本地变量 ; 在 ThreadLocalMap map = getMap

    32600

    Electron中调用DLL

    fr=aladdin Edge.js 开源项目 edge 可以帮助我们实现 Node 和 .NET 之间的相互调用 我们最常见就是使用它来调用C#的代码方法或者C#生成的DLL文件的方法 C/C++生成的...缺点是: 性能有折损 类似其他语言的FFI调试,此方法近似黑盒调用, 查错比较困难。...为什么需要使用DLL 需要使用系统 API 操作或扩展应用程序; 需要调用第三方的接口API,特别是与硬件设备进行通信,而这些接口 API 基本上都是通过 C++ 动态链接库(DLL)实现的; 需要调用...字符串虽然在js中被认为是基本类型,但在C语言中是以对象的形式来表示的,所以被认为是引用类型。...()) //但是实际上指向的是同一个内存地址,即所引用值是相同的 可以通过ref.alloc(Object|String type, ?

    11.6K41

    android学习笔记----Handler的使用、内存泄漏、源码分析等一系列问题

    是的,在Handler的构造方法中,一定会将Handler对象里的引用指向Looper对象里的消息队列对象,所以共用一个消息队列对象。 Handler和Looper关联吗?...handler.sendMessage方法和handler.post方法在干嘛?        ...不管是sendMessage方法还是post的一些方法,最终都会执行到sendMessageAtTime方法,在这个方法里,会有消息进队列的操作,而Looper.loop()不断的尝试从消息队列取出消息执行...r(Runnale对象),post开头的方法都会调用sendMessage开头的方法,传入之前都会调用getPostMessage方法。...、软引用、弱引用、虚引用的概念 WeakReference弱引用,与强引用(即我们常说的引用)相对,它的特点是,GC在回收时会忽略掉弱引用,即就算有弱引用指向某对象,但只要该对象没有被强引用指向(实际上多数时候还要求没有软引用

    60610

    关于Activity回收你要知道的事情

    也就是说当执行到GC的时候,会调用到这里,然后执行Runnable的时候调用到虚拟机3/4内存的计算。 finallize方法最后重新创建了一个GcWatcher的弱引用。...sGcWatcher是一个静态对象,如果它是一个强引用,那么他就会存在静态引用方法区,就会导致这个强引用的GC线程无法回收。...所以作为弱引用,引用对象在被回收时就会触发sGcWatcher的finalize方法,执行结束时仔new一个弱引用出来,以保证下次的调用。 那么这里如何保证GC回收呢?...activity TaskRecord firstTask = null; // 只有在2个或多个task任务栈时,tasks才不为空。...而对于我们上文说的回收不可见Task的时机是在关键点 Java使用内存超过3/4的时候,调用AMS的releaseSomeActivities,尝试释放不可见Activity,当然,并非所有不可见的Activity

    93331

    基于Unity的编辑器开发(二): 进程间通信

    , 只要不执行Unity特有的方法(会报”ECall 方法必须打包到系统模块中”的异常), 就可以在Winforms工程中安全地复用游戏脚本中的代码了....尝试使用Full Duplex Asynchronous Read/Write with Named Pipes - CodeProject里的基于NamedPipe方法, 遇到一些问题: Unity这边会报异常...本质上的实现也是把MethodCall给序列化了, 走的还是SendMessage的流程: public static void SendMessage(Message message)...= className, MethodName = methodName, Arguments = args }); } 收到消息后通过预先注册好的MethodInfo直接Invoke调用执行就可以了...目前的思路是这样的: * Unity这边的数据对象序列化, 发送到编辑器 * 编辑器收到数据, 反序列化出数据对象(不能依赖Unity的方法, 否则会抛异常) * 编辑器修改后的对象序列化后发送到

    3.4K160

    C++面试题

    SendMessage发送消息时,系统直接调用目标窗口的消息处理程序,并将结果返回。SendMessage在同一线程中发送消息并不入线程消息队列。 如果在不同线程内。...这是SendMessage的一般情况,事实上,处理过程要复杂的多。...方法一: 创建一个类MyButton, 让该类从CButton类派生 在该子类中处理鼠标移动事件, 鼠标移动到该按钮上, 计算随机位置, 移动按钮 在窗口中拖放一个CButton按钮, 给该按钮关联一个...指针使用时要在前加 * ,引用可以直接使用。 引用在定义时就被初始化,之后无法改变;指针可以发生改变。 即引用的对象不能改变,指针的对象可以改变。 没有空引用,但有空指针。...这使得使用引用的代码效率比使用指针的更高。因为在使用引用之前不需要测试它的合法性。相反,指针则应该总是被测试,防止其为空。

    2.3K30

    五分钟用C++11实现Android系统的Handler机制

    sendMessage函数负责把AlMessage转发到AlLooper,值得注意的是,在发送到AlLooper之前会先给AlMessage的成员变量target赋值,也就是当前AlHandler对象的指针...prepare用于为当前线程准备一个AlLooper,因为我们规定同一个线程只能拥有一个AlLooper对象,如果尝试在一个线程重复调用该函数函数将引发异常。...myLooper用于获取当前线程的AlLooper,如果在该函数调用之前没有调用过prepare将会获得一个空指针。...sendMessage函数则用于在消息队列尾部插入一条消息。...AlMessageQueue则是一个阻塞队列,当尝试从一个空队列获取AlMessage时将会造成线程阻塞,如果其它线程向空队列新增一个AlMessage对象将会唤醒阻塞的线程。

    75440

    异步线程大师Handler(源码+图+demo+常见问题)

    注意:handler会持有匿名对象的引用,匿名对象会持有外部类对象的引用,虽然ide不再警告但是内存泄漏问题并没有解决。...为空则New Message对象,不为空则获取缓存中的Message对象 17 if (sPool !...Handler对象与其调用者在同一线程中,如果在Handler中设置了延时操作,则调用线程也会堵塞。每个Handler对象都会绑定一个Looper对象,每个Looper对象对应一个消息队列(MQ)。...4.使用post()将线程对象放到消息队列中后,当Looper轮询到该线程执行时,实际上并不会单独开启一个新线程,而仍然在当前Looper绑定的线程中执行,Handler只是调用了该线程对象的run()...5.使用sendMessage()将消息对象加入到消息队列后,当Looper轮询到该消息时,就会调用Handler的handleMessage()来对其进行处理。

    51320

    Android :安卓学习笔记之 Handler机制 的简单理解和使用

    () 6.3、方式1:使用 Handler.sendMessage() /** * 此处以 匿名内部类 的使用方式为例 */ // 步骤1:在主线程中 通过匿名内部类 创建Handler类对象...* 注:需在子线程中手动调用该方法 */ public static final void prepare() { if (sThreadLocal.get() !...(Looper),同时也生成了1个消息队列对象(MessageQueue) * 注:该方法在主线程(UI线程)创建时自动调用,即 主线程的Looper对象自动生成,不需手动生成 */ /.../ 在Android应用进程启动时,会默认创建1个主线程(ActivityThread,也叫UI线程) // 创建时,会自动调用ActivityThread的1个静态的main()方法 = 应用程序的入口...= 空方法,在创建Handler实例时复写 = 自定义消息处理方式 **/ public void handleMessage(Message msg) { ...

    96910

    Android精通之Handler讲解

    Handler的方法以及使用 1.Handler.sendMessage() 2.Handler.post() 二:在onCreate中为主线程/UI线程,做一些轻量级的事情 主线程: //创建一个Handler...对象的引用机制,使得程序能够灵活地控制对象的生命周期。...强引用(StrongReference) 强引用可以理解为我们生活中必不可少的东西,如你的手机,当你空间不足时(占用空间),你也不会丢弃它,宁可抛出异常,在Java中最为常见的对象,只要此引用存在并且没有被释放就不会被垃圾回收机制回收...弱引用(WeakReference) 弱引用即是生活中可有可无的东西,在Java中如果一个对象具备弱引用,那么不管空间是否足够都会被回收。...= null,表示weakReference指向的对象activity没有被回收。 如果此方法返回为空的话,说明weakReference指向的对象activity已经被回收。

    46320

    Android面试之高级篇

    后台线程就是通过传进来的 Handler对象引用来sendMessage(Message)。...但通过这两种方法发送的消息执行的方式略有不同:通过sendMessage发送的是一个message对象,会被 Handler的handleMessage()函数处理;而通过post方法发送的是一个runnable...当convertView为空时,用setTag()方法为每个View绑定一个存放控件的ViewHolder对象。...当 convertView 不为空,重复利用已经创建的 view 的时候,使用 getTag()方法获取绑定的 ViewHolder对象,这样就避免了findViewById对控件的层层查询,而是快速定位到控件...4、Bitmap对象不再使用时调用recycle()释放内存 有时我们会手工的操作Bitmap对象,如果一个Bitmap对象比较占内存,当它不再被使用的时 候,可以调用Bitmap.recycle()方法回收此对象的像素所占用的内存

    1.4K90

    Android开发之Handler的前世今生

    后台版本允许你将接收到的消息队列调用的Runnable对象排入队列; sendMessage版本允许你将包含将由处理程序的handleMessage(Message)方法处理的数据包(要求您实现Handler...是怎么来的,我们先把下面的看完;继续看下面一句: mQueue = mLooper.mQueue;我们的handler里面也有一个队列的对象,实际上mQueue就是MessageQueue,后面我们会讲解到...可以看到我们的sendMessage有多种方法,但最终都会调用enqueueMessage方法,我们看enqueueMessage方法源码: ?...可以看到handleMessage是一个空的方法,我们看handleMessage在哪被调用的呢? ?...handler时需要重写handleMessage方法; 实例化Handler时,handler中会获得当前线程的looper以及looper的messageQueue; 在调用sendMessage发送消息时

    42610

    Go语言入门——进阶语法篇(三)

    Go会先解引用然后在访问成员 (*pStu).name = "John" 添加方法 方法就是一种特殊的函数,对应到面向对象类的概念中,也就是所谓的行为。...h := &HuaWei{} // 通过赋值,初始化接口类型变量 phone = h // 使用接口变量调用方法 phone.Call("123456") phone.SendMessage...声明一个Phone接口,它具有两个空方法Call和SendMessage,再定义一个具体的结构体HuaWei,然后给HuaWei结构体绑定两个Phone接口的具体实现方法,这时候HuaWei结构体即隐式的实现了...我们在使用的时候,将具体的结构体对象赋值给接口类型对象,然后使用接口类型对象去调用方法,而不是使用具体的结构体HuaWei的实例对象去调方法。...,如上例中使用具体结构体的h变量调用方法,这就是和特定对象关联了。

    56931

    Android异步通信:深入剖析Handler机制源码

    ) // 至此,保证了handler对象 关联上 Looper对象中MessageQueue } 从上面可看出: 当创建Handler对象时,则通过 构造方法 自动关联当前线程的...) * 注:需在子线程中手动调用该方法 */ public static final void prepare() { if (sThreadLocal.get() !...(Looper),同时也生成了1个消息队列对象(MessageQueue) * 注:该方法在主线程(UI线程)创建时自动调用,即 主线程的Looper对象自动生成,不需手动生成 */ // 在...= 空方法,在创建Handler实例时复写 = 自定义消息处理方式 **/ public void handleMessage(Message msg) { ......(msg, uptimeMillis); } // 注:实际上从分析2开始,源码 与 sendMessage(Message msg)发送方式相同 从上面的分析可看出: 消息对象的创建 =

    66720
    领券