activity

java高级 - 注解

怎甘沉沦 提交于 2019-12-18 04:36:06
/** * Created by Michael on 2019/12/17. * @interface代表注解 */ @Target(ElementType.FIELD) //放到哪里,这里代表放到属性上面 @Retention(RetentionPolicy.RUNTIME) //什么时候起作用 .RUNTIME运行时 .CLASS编译时 public @interface ViewById { int value(); } @interface代表声明一个注解,注解只是一个标识 使用注解: public class MainActivity extends AppCompatActivity { @ViewById(R.id.tv) private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ViewUtils.inject(this); tv.setText("hello lzy!"); } } 如果不加ViewUtils.inject(),会报错,说明注解只是一个标识,我们还需要进行处理: public class

初识android——四大组件

末鹿安然 提交于 2019-12-18 02:31:07
android的四大组件:Activity、Service、ContentProvider、BroadCast activity Activity之间的调用和参数传递: 1、 android通过activity窗口与用户进行交互,它相当于一个个jsp展示页面; 2、 通过intent来控制activity的跳转;打开新的activity的方法: View Code 1 Intent intent = new Intent();2 intent.setClass(MainActivity.this, OtherActivit.class);3 //或者4 intent.setConponent(new CompunentName(MainActivity.this,OtherActivity.class)); 1、 Activity之间的传值:intent.putExtra(“id”,10); 传一个对象:序列化参数传递 取值: Intent intent = this.getIntent(); Int id = intent.getIntExtra(“id”,0); String name = intent.getStringExtra(“name”); 另外,可以通过intent反向传递参数…… MainActivity.this.startActivityForResult

android activity详解三:保存activity的状态

百般思念 提交于 2019-12-18 00:24:47
保存activity的状态 在“acitvity的生命周期”一节中提到了当暂停和停止时,activity的状态是被保留在内存中的,当resume时,它会立即开始执行。 左图表示acitvity未销毁,只是被停止再开始的过程,右图表示acvitiry所在的进程被关了,那么acitvity就销毁了,然后又被重新创建的过程。 当用户在开启一个新activity时,当前的activity可能在内存中处于停止状态也可能由于新activity需要更多内存而被系统杀掉了,但不论怎样,当用户在新activity上按返回键时,他希望看到的是原先的activity的界面。原先的activity如果是被重新创建,那么它要恢复到用户最后看到它的样子。那么我们怎么做呢?其实也不难,跟据上一节所述,在onPause()或onStop()或onDestyroy()中保存必要的数据就行了。但是现在google又冒出一个新的东西:onSaveInstanceState(),观其名可知其意:它是专门用来保存实例状态的,这个“实例”不是指的activity对象,而是它所在的进程,因为activity的销毁是因为它所在的进程被杀而造成的。onSaveInstanceState()是在系统感觉需要杀死activity时调用的,它被传入一个参数:Bundle,这个Bundle可以被认为是个map,字典之类的东西,用”键-值

Glide生命周期原理

房东的猫 提交于 2019-12-17 19:07:17
本文首发于 vivo互联网技术 微信公众号 链接: https://mp.weixin.qq.com/s/uTv44vJFFJI_l6b5YKSXYQ 作者:连凌能 Android App中图片的展示是很基本也很重要的一个功能,在Android平台上有很多的图片加载解决方案,但是官方认可的是Glide。Android App的页面是有生命周期的,Glide比较好的一个功能就是具有生命周期管理功能,能够根据页面和APP的生命周期来管理图片的加载和停止,也开放接口供用户在内存紧张时手动进行内存管理。本文重点是生命周期源码的分析,不会从简单的使用着手。 一、综述 这是Glide源码分析的第二篇文章,第一篇是 《Glide缓存流程》 ,从资源的获取流程对源码进行分析。本篇会聚焦于生命周期模块的原理。开始之前先思考下面这几个问题: Glide怎么实现页面生命周期? Glide为什么对Fragment做缓存? Glide如何监听网络变化? Glide如何监测内存? 二、Glide生命周期传递 先来看with函数的执行, 会构造glide单例,而 RequestManagerRetriever在initializeGlide中会进行构造。 // Glide.java public static RequestManager with(@NonNull Activity activity) {

Android service的完全详解

穿精又带淫゛_ 提交于 2019-12-17 06:10:18
Service全部内容基本会在本篇涉及到,我们将围绕以下主要知识点进行分析: Service简单概述 Service在清单文件中的声明 Service启动服务实现方式及其详解 Service绑定服务的三种实现方式 关于启动服务与绑定服务间的转换问题 前台服务以及通知发送 服务Service与线程Thread的区别 管理服务生命周期的要点 Android 5.0以上的隐式启动问题及其解决方案 保证服务不被杀死的实现思路 1.Service简单概述   Service(服务)是一个一种可以在后台执行长时间运行操作而没有用户界面的应用组件。服务可由其他应用组件启动(如Activity),服务一旦被启动将在后台一直运行,即使启动服务的组件(Activity)已销毁也不受影响。 此外,组件可以绑定到服务,以与之进行交互,甚至是执行进程间通信 (IPC)。 例如,服务可以处理网络事务、播放音乐,执行文件 I/O 或与内容提供程序交互,而所有这一切均可在后台进行,Service基本上分为两种形式: 启动状态   当应用组件(如 Activity)通过调用 startService() 启动服务时,服务即处于“启动”状态。一旦启动,服务即可在后台无限期运行,即使启动服务的组件已被销毁也不受影响,除非手动调用才能停止服务, 已启动的服务通常是执行单一操作,而且不会将结果返回给调用方。 绑定状态  

如何在横竖屏切换时Activity内容不变

笑着哭i 提交于 2019-12-17 00:51:12
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 众所周知,默认情况下,从水平变为垂直,Android的操作过程为关闭Activity,再在当前方向打开此Activity。此过程一般而言没有什么不妥,只是会带来一个问题:用户数据丢失,也就是说,Activity 重启,必然使得内容初始化。补救措施是在变换方向时保存当前内容,如webview的url等。 这种做法当然不够好玩。 正确的做法是,配置Activity的变化状态(这么说可能不大准确。),在AndroidManifest.xml中,对于每一个Activity的配置,有一个属性,android:configChanges=""。这个属性的官方解释是 通过 设置 这个属性可以使Activity捕捉设备状态变化,以下是可以被识别的内容: CONFIG_FONT_SCALE CONFIG_MCC CONFIG_MNC CONFIG_LOCALE CONFIG_TOUCHSCREEN CONFIG_KEYBOARD CONFIG_NAVIGATION CONFIG_ORIENTATION 那么,如下配置则可以完成我们想要的结果: 补充: 每一个config的具体说明: Value Description “ mcc “ The IMSI mobile country code (MCC) has changed —

Intent基本使用

断了今生、忘了曾经 提交于 2019-12-16 22:58:36
本节我们要学习的是四大组件间的 枢纽——Intent(意图),Android通信的桥梁,比如我们可以通过: startActivity (Intent)/ startActivityForResult (Intent):来启动一个Activity startService (Intent)/ bindService (Intent):来启动一个Service sendBroadcast :发送广播到指定BroadcastReceiver 另外别忘了我们在注册四大组件时,写得很多的 Intent-Filter 哦~ 好吧,话不多说,开始本节内容!另外前面我们已经用过Intent了,就不在讲述概念性的东西了~ 老规矩,官方API: Intent 1.显式Intent与隐式Intent的区别 显式Intent :通过组件名指定启动的目标组件,比如startActivity(new Intent(A.this,B.class)); 每次启动的组件只有一个~ 隐式显式Intent :不指定组件名,而指定Intent的Action,Data,或Category,当我们启动组件时, 会去匹配AndroidManifest.xml相关组件的Intent-filter,逐一匹配出满足属性的组件,当不止一个满足时, 会弹出一个让我们选择启动哪个的对话框~ 2.Intent的七个属性: 1

Android四大应用组件之Activity

那年仲夏 提交于 2019-12-16 22:04:37
一、Activity定义   1、Activity, 直译为活动, 它是Android定义的四大应用组件之一,也是最重要用得最多的.   2、Activity用来提供一个能让用户操作并与只交互的界面   3、一个应用界面可以包含多个Activity 二、生命周期以及方法   1、在Android中,Activity是所有程序的根本,所有程序的流程都运行在Activity之中,Activity具有自己的 生命周期 ,,由系统控制生命周期,程序无法改变,但可以用 onSaveInstanceState 保存其状态       2、Activity中的方法以及使用方法:       1)方法:         1、startActivity(Intent intent): 一般启动         2、startActivityForResult(int reqCode, Intent intent): 带回调启动         3、onActivityResult(int reqCode, int resultCode, Intent data): 回调方法         4、setResult(int resultCode, Intent data): 设置要返回的结果         5、finish(): 结束当前         6、Activity getIntent()

Intent(一.显示使用intent)

戏子无情 提交于 2019-12-16 20:16:24
大家都知道如果手机只有一个活动的应用,那这个应用也太简单了吧。如同网页一下,是有多个组成的,在C#中我们可以使用各程skip控件或代码,这里不再赘述。那么我们还是在当前的项目中创建一个名为SecondActivity活动(Activity),并添加一个BTN按钮,代码如下: package cn.hengzhe.tishi; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class SecondActivity extends MainActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second_layout); } } Activity <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com

关于Android路由的实现

岁酱吖の 提交于 2019-12-16 19:02:57
  先说一下背景,目前有需求从外部包括其他应用和WEB跳转到我们自己的APP,就这么个简单的需求……   要实现这种外部跳转的功能,我们可以理解为打算跳转的一方有多少方式通知到APP进行相对的响应行为。所以,如果是应用之间的跳转,则有多种,你可以直接通过包名和具体的类名去打开已经exported=true的Activity,又或者直接通过Android的广播通知进行相关的APP,又或者通过自定义的URL去打开应用。但是如果涉及到Web打开外部应用的话,目前只有一种办法,那就是自定义应用的URL进行拦截,系统会自动调起相应的组件响应这个URL。   但是,要做这种需求,很少会仅仅是完成对外部的支持而已,通常也要进行一定的内部逻辑跳转映射。所以要做这种需求通常分为两个种,一种是对内的(应用内部自己的跳转逻辑),一种对外的(其他应用以及Web跳转逻辑)。   我们先说一下对外的情形,由于考虑到统一性,我们目前只有URL这种手段可以使用了。下面我们一一来说    1、对外跳转说明   1.1、关于URL的说明。   首先,我们得了解一下URL,这里直接引用 https://en.wikipedia.org/wiki/URL 的说明。为了方便说明,我稍稍修改一下,大概的格式如下:    scheme: [ // host [ :port ]][ /path ][? query ][#