zoukankan      html  css  js  c++  java
  • Android笔记

    Service

    Service默认在主线程中,哪怕是在主线程中开子线程启动Service也还是在主线程中

    ANR

    什么是ANR?Application Not Responding,应用程序无响应。

    是什么引起的?通常在主线程执行以下操作: 1. 高耗时的操作,如图像变换 2. 磁盘读写,数据库读写操作 3. 大量的创建新对象

    哪几种类型?

    1. KeyDispatchTimeout(5 seconds) --主要是类型按键或触摸事件在特定时间内无响应
    2. BroadcastTimeout(10 seconds) --BroadcastReceiver在特定时间内无法处理完成
    3. ServiceTimeout(20 secends) --小概率事件 Service在特定的时间内无法处理完成

    如何避免?

    1. UI线程尽量通过Handler来跟子Thread交互
    2. 在子线程中去处理耗时操作

    Activity和Fragment的关系

     Fragment必须依赖于Activity存在,Fragment的生命周期随着Activity的生命周期变化而变化

    Application Context和Activity Context的区别

    第一种中context的生命周期与Application的生命周期相关的,context随着Application的销毁而销毁,伴随application的一生,与activity的生命周期无关.

    第二种中的context跟Activity的生命周期是相关的,但是对一个Application来说,Activity可以销毁几次,那么属于Activity的context就会销毁多次

    在使用Context的时候要注意内存泄漏的问题

    AlarmManager

    AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);

    manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, pendingIntent); 

    第一个参数用来指定AlarmManager的工作类型(从何时开始,要不要唤醒CPU)。比如ELAPSED_REALTIME_WAKEUP 同样表示让定时任务的触发时间从系统开机开始算起,会唤醒 CPU。

    第二个参数是指定触发时间,如果第一个参数是ELAPSED_REALTIME_WAKEUP,这里就用开机时间加上延迟执行的时间即可。

    第三个可以传入一个PendingIntent去启动一个广播或者服务之类的。

    WakeLock

    WakeLock是一个电源管理系统服务功能,应用程序可以使用它来控制设备的电源状态。

    PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);获取PowerManager实例

    然后通过PowerManager的newWakeLock((int flags, String tag)来生成WakeLock实例。int Flags指示要获取哪种WakeLock,不同的Lock对cpu 、屏幕、键盘灯有不同影响。 

    获取WakeLock实例后通过acquire()获取相应的锁,然后进行其他业务逻辑的操作,最后使用release()释放(释放是必须的)

    在manifest里面获取权限

     动画

    View Animation : tweened补间动画,通过指定View的初末状态和变化时间、方式,对View的内容完成一系列的图形变换来实现动画效果,有Alpha、Scale、Translate和Rotate四种效果。

    Drawable Animation :frame帧动画,指定每一帧的内容和停留时间,然后播放动画。像是动画片

    Property Animation :属性动画,就是在一定的时间内,按照一定的规律来改变对象的属性。弥补了之前补间动画的一些缺陷,几乎是可以完全替代掉补间动画了

    Handler机制

    Android的异步消息处理主要由四部分组成:Message、Handler、MessageQueue、Looper

    Message:线程间传递的消息,他可以携带少量信息,比如int、Object

    Handler:消息的处理者,主要用来发送消息和处理消息

    MessageQueue:消息队列,主要用来存放所有通过Handler发送的消息,这部分的消息会一直存在消息队列中,等待被处理。每个线程中只会有一个MessageQueue对象

    Looper:是每个线程中MessageQueue的管家,调用Looper的loop方法后,就会进入到一个无限循环中,然后每当发现消息队列中存在一条消息就会将其取出,并传递到Handler的handleMessage()中进行处理。每个线程中也只会有一个Looper对象,这个源码中是在looper.prepare()中会去检查当前线程有没有looper,有则抛出异常,没有就new一个。

     RxJava

    优点:使逻辑简洁。异步操作很关键的一点是程序的简洁性,因为在调度过程比较复杂的情况下,异步代码经常会既难写也难被读懂。 Android 创造的AsyncTask 和Handler ,其实都是为了让异步代码更加简洁。RxJava 的优势也是简洁,但它的简洁的与众不同之处在于,随着程序逻辑变得越来越复杂,它依然能够保持简洁。

    View和ViewGroup的关系

    View是所有UI组件的基类,ViewGroup是容纳这些组件的容器,他本身也是View派生而来的。可以包含View,也可以包含ViewGroup

  • 相关阅读:
    python3爬虫例子01(获取个人博客园的粉丝)
    python3基础10(操作日志)
    vmlinux,zImage 和 uImage
    zynq tcf-agent debug Linux application
    Vim 打开二进制文件,让它不自动加最后的换行符 0a
    pip 设置代理
    Linux 设置代理
    一个简单的备份方案 (Linux Server to Windows Server)
    解 RPM 归档的方法
    ZYNQ 从 QSPI-Flash 启动,更新 EMMC image
  • 原文地址:https://www.cnblogs.com/i-love-kobe/p/5915258.html
Copyright © 2011-2022 走看看