Android Service详解之设置前台服务
[TOC]
文章参考:https://blog.csdn.net/SuperBigLw/article/details/53158607
一、前台服务前台服务被认为是用户主动意识到的一种服务,因此在内存不足时,系统也不会考虑将其终止。 前台服务必须为状态栏提供通知,放在“正在进行”标题下方,这意味着除非服务停止或从前台移除,否则不能清除通知。
二、前台服务的使用例如,应该将通过服务播放音乐的音乐播放器设置为在前台运行,这是因为用户明确意识到其操作。 状态栏中的通知可能表示正在播放的歌曲,并允许用户启动 Activity 来与音乐播放器进行交互。
三。实现前台服务的步骤其实很简单就是将服务创建后创建一个Notification就好,利用提供好的方法进行显示和移除就好
1.创建一个Service,在这个Service的onCreate方法中创建一个Notification
12345678910111213@Override public void onCreate() { Notification.Builder builder = new Notifica ...
Android之BroadcastReceiver基础学习
[TOC]
概述文章转自:https://www.cnblogs.com/lilykeke/p/10329964.html
Android之Fragment基础知识学习
[TOC]
文章参考:https://developer.android.com/training/basics/fragments/creating?hl=zh-cn
概述Fragment 表示 FragmentActivity 中的行为或界面的一部分。您可以在一个 Activity 中组合多个片段,从而构建多窗格界面,并在多个 Activity 中重复使用某个片段。您可以将片段视为 Activity 的模块化组成部分,它具有自己的生命周期,能接收自己的输入事件,并且您可以在 Activity 运行时添加或移除片段(这有点像可以在不同 Activity 中重复使用的“子 Activity”)。
片段必须始终托管在 Activity 中,其生命周期直接受宿主 Activity 生命周期的影响。例如,当 Activity 暂停时,Activity 的所有片段也会暂停;当 Activity 被销毁时,所有片段也会被销毁。不过,当 Activity 正在运行(处于已恢复生命周期状态)时,您可以独立操纵每个片段,如添加或移除片段。当执行此类片段事务时,您也可将其添加到由 Activity 管理 ...
Android之Context类的详细解析(基于Android-29)
[TOC]
文章参考:http://gityuan.com/2017/04/09/android_context/
概述 Context也就是上下文对象。相信所有的Android开发人员基本上每天都在接触,但是我们可能却并不能很好的理解
Context类型在开发中我们经常使用Context,它的使用场景总的来说分为两大类:
使用Context调用方法,比如启动Activity、访问资源、调用系统级服务等。
调用方法时传入Context,比如弹出Toast、创建Dialog等
Activity、Service和Application都间接地继承自Context。下面我们来看一下Context的继承结构:
从图中我们可以清楚的看到。Context使用的是装饰者模式也称为包装模式(Wrapper Pattern),属于结构型设计模式。
Context的继承结构还是稍微有点复杂的,可以看到,直系子类有两个,一个是ContextWrapper,一个是ContextImpl。那么从名字上就可以看出:
Context 类本身是一个纯 abstract 类,他有两个具体的实现子类:Co ...
Androdi之FragmentTransaction学习
[TOC]
前面我们学习了Fragment的基础知识学习
关于FragmentTransaction的各种提交方法: commit(),commitAllowingStateLoss(),commitNow()和commitNowAllowingStateLoss()。我们来整体学一下。
FragmentTransaction的提交方法Fragment中FragmentTransaction提供了四种不同的方法来commit一个transaction:
commit()
commitAllowingStateLoss()
commitNow()
commitNowAllowingStateLoss()
下面,我们分别分析一下这几种用法:
commit() VS commitAllowingStateLoss()用commit()提交有时候会遇到IllegalStateException, 说你在onSaveInstanceState()之后提交。
常用Fragment的哥们,可能会经常遇到这样Activity状态不一致:State loss这样的错误。主要是因为:commit方法一 ...
Android之Context类的功能与使用
[TOC]
文章参考:http://gityuan.com/2017/04/09/android_context/
如何获取ContextContext的源码Context的使用Context可能引起的内存泄漏1)错误的单例模式
1234567891011121314151617public class Singleton{ private static Singletoninstance; private Context mContext; private Singleton (Contextcontext) { this.mContext=context; } publics tatic Singleton getInstance(Context context) { if(instance==null){ instance = new Singleton(context); } re ...
Application的onTerminate能监听应用退出吗?
[TOC]
概述 我们在集成Application的时候发现Android的Application中有一个公开的回调方法:
1onTerminate()
继而想当然的认为该方法即是Android的整个App应用退出后的回调,因为Terminate的词面意思就是结束,终结嘛。那么onTerminate在Android的App全部结束后回调,真的是这样的吗?
答案是:是这样,也不是这样。是这样是因为onTerminate()会在Android的模拟器上触发回调。说它不是这样,是因为onTerminate()不会在Android真实的机器设备上触发。
先看Android官方对于onTerminate函数的文档解释:
12345678910/** * This method is for use in emulated process environments. It will * never be called on a production Android device, where processes are * removed by simply killing them; ...
Android系统架构解析
概述Android的系统架构 Android系统架构分为五层,从上到下依次是应用层、应用框架层、系统运行库层、硬件抽象层和Linux内核层,如图所示。
系统运行库层(Native)系统运行库层分为两部分,分别是C/C++程序库和Android运行时库,下面分别进行介绍。
C/C++程序库C/C++程序库能被Android系统中的不同组件所使用,并通过应用程序框架为开发者提供服务,
Android运行时库运行时库又分为核心库和ART(Android 5.0系统之后,Dalvik虚拟机被ART取代)。核心库提供了Java语言核心库的大多数功能,这样开发者可以使用Java语言来编写Android应用。与JVM相比,Dalvik虚拟机(DVM)是专门为移动设备定制的,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik应用作为一个独立的Linux进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。而替代DVM的ART的机制与DVM不同,DVM中的应用每次运行时,字节码都需要通过即时编译器(Just In Time,JIT)转换为机器 ...
Android之系统源码导入AndroidStudio
[TOC]
代码编译12345678910source build/envsetup.sh lunch 5 // 在编译之前,可以输入以下命令,查看你的Mac CPU核数: sysctl -n machdep.cpu.core_count // 输出为4核,我们就可以启动4个线程来编译源码: make -j4
macOS Catalina(10.15.7)编译Android源码问题问题一 Could not find a supported mac sdk: [“10.10” “10.11” “10.12” “10.13” “10.14”]
解决方案
Android源码导入AndroidStudio教程
[TOC]
文章参考:https://blog.csdn.net/xct841990555/article/details/119131460
下载好全包源码后,在源码根目录执行以下四条命令:
1234source build/envsetup.shlunch aosp_x86-eng #或者直接输入lunch,然后选择对应的targetmake idegen -j4 #(这里的 -j4 表示用4线程来编译,可以不加)development/tools/idegen/idegen.sh
完成以上四个步骤之后,会发现在源码根目录下出现了三个新的文件(也有可能是两个)
123451. android.iml (记录项目所包含的module、依赖关系、SDK版本等等,类似一个XML文件)2. android.ipr (工程的具体配置,代码以及依赖的lib等信息,类似于Visual Studio的sln文件)3. android.iws (主要包含一些个人的配置信息,也有可能在执行上述操作后没有生成,这个没关系,在打开过一次项目之后就会自动生成了)
“android.iml”和”a ...