activity

Android开发 LiveData与MutableLiveData详解

你。 提交于 2019-11-30 01:38:51
前言   LiveData与ViewMode是经常搭配在一起使用的,但是为了不太混乱,我还是拆分开来说明,此篇博客只讲解 LiveData 与 MutableLiveData的概念与使用方式(但是会涉及到ViewMode的部分代码). LiveData是干什么的?    由于LiveData和MutableLiveData都是一个概念的东西(只是作用范围不同)所以就不重复解释了,直接理解LiveData就可以明白MutableLiveData   直接理解LiveData的字面意思是前台数据,其实这其实是很准确的表达.下面我们来说说LiveData的几个特征: 1.首先LiveData其实与数据实体类(POJO类)是一样的东西,它负责暂存数据. 2.其次LiveData其实也是一个观察者模式的数据实体类,它可以想跟它注册的观察者回调数据是否已经更新. 3.LiveData还能知晓它绑定的Activity或者Fragment的生命周期,它只会给前台活动的activity回调(这个很厉害).这样你可以放心的在它的回调方法里直接将数据添加到View,而不用担心会不会报错. LiveData与MutableLiveData区别 LiveData与MutableLiveData的其实在概念上是一模一样的.唯一几个的区别如下: 1.LiveData是使用于实体类的抽象方法

Android应用程序的Activity启动过程简要介绍和学习计划

情到浓时终转凉″ 提交于 2019-11-29 23:20:12
在Android系统中,Activity和Service是应用程序的核心组件,它们以松藕合的方式组合在一起构成了一个完整的应用程序,这得益于应用程序框架层提供了一套完整的机制来协助应用程序启动这些Activity和Service,以及提供Binder机制帮助它们相互间进行通信。在前面的文章 Android进程间通信(IPC)机制Binder简要介绍和学习计划 和 Android系统在新进程中启动自定义服务过程(startService)的原理分析 中,我们已经系统地介绍了Binder机制和Service的启动过程了,在本文中,简要介绍Activity的启动过程以及后续学习计划。 在Android系统中,有两种操作会引发Activity的启动,一种用户点击应用程序图标时,Launcher会为我们启动应用程序的主Activity;应用程序的默认Activity启动起来后,它又可以在内部通过调用startActvity接口启动新的Activity,依此类推,每一个Activity都可以在内部启动新的Activity。通过这种连锁反应,按需启动Activity,从而完成应用程序的功能。 这里,我们通过一个具体的例子来说明如何启动Android应用程序的Activity。Activity的启动方式有两种,一种是显式的,一种是隐式的,隐式启动可以使得Activity之间的藕合性更加松散,因此

Android中Context

这一生的挚爱 提交于 2019-11-29 22:58:08
Context字面意思上下文,位于framework package的android.content.Context中,其实该类为LONG型,类似Win32中的Handle句柄,很多方法需要通过 Context才能识别调用者的实例,比如说Toast的第一个参数就是Context,一般在Activity中我们直接用this代替,代表调用者的 实例为Activity,而到了一个button的onClick(View view)等方法时,我们用this时就会报错,所以我们可能使用ActivityName.this来解决,主要原因是因为实现Context的类主要有Android特有的几个模型,Activity、Service以及BroadcastReceiver。 Context提供了关于应用环境全局信息的接口。它是一个抽象类,它的执行被Android系统所提供。它允许获取以应用为特征的资源和类型。同时启动应用级的操作,如启动Activity,broadcasting和接收intents。 两种类型的Context 在android中context可以作很多操作,但是最主要的功能是加载和访问资源。在android中有两种context,一种是 application context,一种是activity context,通常我们在各种类和方法间传递的是activity context

Android Fragment的使用

筅森魡賤 提交于 2019-11-29 22:42:48
可以分为下面的几部分: 使用支持库 创建一个 Fragment 创建一个动态 UI 多个 Fragment 之间的通信 1 、使用支持库 如果您的应用需要运行在 3.0 及以上的版本,可以忽略这部分内容。 如果您的应用使用在 3.0 以下、 1.6 及以上的版本,需要使用支持库来构建。 使用支持库的步骤: 使用 SDK 下的 SDK Manager 工具下载 Android Support Package 2. 在您的 Android 工程的顶级目录下创建一个 libs 目录 3. 找到您的 SDK 下的 /extras/android/support/v4/android-support-v4.jar ,并且拷贝到您的项目的 libs 下,选中这个 jar 包 → 右键 → Build Path → Add to Build Path 4.在您的项目的 Manifest.xml 文件的 <manifest> 标签下添加: < uses-sdk android:minSdkVersion = "4"   android:targetSdkVersion = "8" /> 5.如果您的项目支持 3.0 以下的版本,请导入如下的包: android.support.v4.*; 在使用 Fragment 的 Activity 请继承 FragmentActivity 而不是

基于textureview编写opengl程序

99封情书 提交于 2019-11-29 21:42:25
与SurfaceView相比,TextureView并没有创建一个单独的Surface用来绘制,这使得它可以像一般的View一样执行一些变换操作,设置透明度等。 另外,Textureview必须在硬件加速开启的窗口中。下面的例子演示了通过TextureView来创建一个opengl程序。 基于TextureView的程序,我们需要实现TextureView.SurfaceTextureListener这个接口,首先给出Activity的代码,在该类中,我们实现了此接口: package com.fyj.test; import java.util.concurrent.atomic.AtomicBoolean; import android.app.Activity; import android.graphics.SurfaceTexture; import android.os.Bundle; import android.view.TextureView; import android.view.View; import android.view.Window; import android.view.WindowManager; public class TextureviewtestActivity extends Activity implements

从0到1优雅实现沉浸式状态栏

好久不见. 提交于 2019-11-29 20:55:59
目录 1. 概述 2. 实现方案 2.1 前期工作 2.1.1 修改应用主题 2.1.2 获取状态栏高度 2.2 Android 5.0+ 2.2.1 设置状态栏颜色 2.2.2 设置状态栏文字颜色 2.2.3 设置状态栏透明 2.3 Android 4.4+ 2.3.1 设置状态栏颜色 2.3.2 设置状态栏透明 3. 特殊场景 3.1 启动页 3.2 弹窗 参考 1. 概述 现在市面上绝大多数APP都实现了沉浸式状态栏的效果,该效果可以极大地提升用户的使用体验。但是,APP默认的情况下只是设定一个固定的状态栏颜色,那么就需要我们通过代码去动态修改状态栏颜色的。那么,如何去实现呢? 首先来说,从Android 4.4开始才能实现沉浸式状态栏的,所以如果您的APP也支持Android 4.4以下版本,那还需要对Android 4.4以下版本做“不支持沉浸式状态栏”处理。 那么,从Android 4.4开始,大概可以分成三个阶段来实现沉浸式状态栏: Android4.4(API 19) - Android 5.0(API 21):这个阶段的实现方式为:通过FLAG_TRANSLUCENT_STATUS设置状态栏为透明并且为全屏模式,然后通过添加一个与StatusBar一样大小的View,将View的背景设置为要设置的颜色,从而实现沉浸式。 Android 5.0(API 21) -

Android四种模式里隐含的哲学

别来无恙 提交于 2019-11-29 19:54:53
Android的核心概念是Activity。一切围绕着Activity展开,Task也不例外。也就是说,Task是作为Activity的一种属性存在的。甚至,整个系统都是作为Activity的运行环境而存在的。 SingleInstance指的也是Single的Activity Instance。我想,原因应该是,毕竟在整个Android系统中,唯一具有内容的,或者说所有的内容,都是放在Activity中的。Activity就是一个用户盒子,一切用户逻辑都在这个盒子中。自然它就变成并且就是Android中最重要的部分。因为一切的存在都是为了最终完成这些用户活动。并且这些活动才是一切的基础。 Activity怎么理解呢? Activity根据语义是用户的活动,扯上形式理论就是,一切位于Activity中的变量或方法(执行)都应该承载这个语义。因为程序始终都只是个形式系统,因为它能承载语义所以才具有意义。所以才能存在。变量与视图(View)用来表达状态,方法(或事件以及对事件的响应)用来表达用户的行为,这个就是一个Petri网。 也就是说,Activity才是真正的容器。是Android系统中战斗在第一线的成员,也是Android的战斗假想发生地。一切Android战斗都发生在Activity中。 来源: oschina 链接: https://my.oschina.net/u

实例分析之NotePad(三)

风格不统一 提交于 2019-11-29 19:54:16
通过最近一段时间的入门学习,我所知道的知识是,一个界面会对应着一个Activity,而一个界面还会有一个布局文件。之前所学的教程中,一般只有一个界面,所以只有一个Activity和一个布局文件。现在我们所分析的NotePad,通过工程目录树,我们可以看到,它有三个布局文件: 既然有三个布局文件,那么程序实际运行时,是不是只有三个窗口呢(3个Activity)?各位可以自己在手机上反复操作一个NotePad这个程序,看看是不是只能找到三个操作窗口: 第一个是对应noteslist_item.xml的: 第二个是对应note_editor.xml的: 第三个是对应title_editor.xml的: 上面最后这个不容易找到,我一开始也没有发现。它需要通过点击程序里的菜单调出来: 点击上图中的那个Edit title就出来了。 那么它的源代码文件是不是也是三个呢? 显然源代码文件多于布局文件,那么究竟,哪个源代码文件对应着哪个布局文件呢?暂时我还得不到答案。不过,我们可以看看另外一个重要的文件AndroidManifest.xml。在官网的教程中提到过,应用程序中所有的Activity都要在AndroidManifest.xml文件中登记。 可以看出来,这里共有四个Activity。其中有三个,我们一看便知道,与我们前面的布局文件是相对应的。NotesList对应着noteslist

Android中隐式意图(Intent)用法

不羁岁月 提交于 2019-11-29 19:53:31
Intent对象在Android应用开发中起到很大的作用,例如激活组件(Activity,Service 等组件)或者携带数据的功能,相信大家在开发中经常会用到这些功能,Android中的意图分为 显式意图 和 隐式意图 ,显式意图大家应该用得比较多,但隐式意图在开发过程中也是必不可少的。在这篇文章中粗略讲解下个人对隐式意图的用法。 假设情景:我要从一个Activity跳转到另外一个Activity中,通过隐式意图来激活另外一个Activity,应该如何实现呢? 首先,我们在Manifest.xml配置文件中配置intent-filter过滤器节点: [html] view plain copy <? xml version = "1.0" encoding = "utf-8" ?> < manifest xmlns:android = "http://schemas.android.com/apk/res/android" package = "com.andyidea.intentdemo" android:versionCode = "1" android:versionName = "1.0" > < uses-sdk android:minSdkVersion = "8" /> < application android:icon = "@drawable/ic

Android的Notification研究

喜夏-厌秋 提交于 2019-11-29 19:52:54
Android的Notification研究 最近在研究Android,遇到了一些Notification(通知)的问题: 1、Notification如何传递参数 2、Notification如何区别化 3、从Intent(意图)寻找Activity(活动)说起,Android的Activity栈。 =============================================================== 先从发送通知开始。 首先,在发送一个Notification前,我们需要准备好一个NotificationManager 获得途径: NotificationManager mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE); this为Application或者Activity。 然后,定义好我们的Notification: 1、定义一个Notification具备的三个基本参数icon,title,以及when ? int icon=R.drawable.teller_call_1; long when = System.currentTimeMillis(); Notification notification