android83 Activity的生命周期,启动模式,返回时传递数据
#Android四大组件
* Activity
* BroadCastReceiver
* Service
* ContentProvider #Activity生命周期
* oncreate:Activity对象创建完毕,但此时不可见
* onstart:Activity在屏幕可见,但是此时没有焦点(不能够点,不能够交互)
* onResume:Activity在屏幕可见,并且获得焦点
* onPause:Activity此时在屏幕依然可见,但是已经没有焦点
* onStop:Activity已经不可见了,但此时Activity的对象还在内存中
* onDestroy:Activity对象被销毁 ###内存不足
* 内存不足时,系统会优先杀死后台Activity所在的进程,都杀光了,如果内存还是不足,那么就会杀死暂停状态的Activity所在的进程,如果还是不够,有可能杀死前台进程
* 如果有多个后台进程,在选择杀死的目标时,采用最近最少使用算法(LRU) ---
###Activity任务栈(按返回键时会依次出栈进行显示)
* 应用运行过程中,内存中可能会打开多个Activity,那么所有打开的Activity都会被保存在Activity任务栈
* 栈:后进先出,最先进栈,就会最后出栈 ###Activity的启动模式4种:
. 标准模式:默认就是这个模式(启动一个就在站上加一个,没有复用)
.singleTop:如果目标Activity不在栈顶,那么就会启动一个新的Activity,如果已经在栈顶了,那么就不会再启动了(前台的页面是栈顶的Acticity)
.singleTask:如果栈中没有该Activity,那么启动(返回键显示时,返回就是从栈中取出Activity)时就会创建一个该Activity,如果栈中已经有该Activity的实例存在了,那么在启动时,就会杀死在栈中处于该Activity上方的所有Activity全部杀死,那么此时该Activity就成为了栈顶Activity。查看多个网页的时候看起来是打开了多个网页其实只有一个Activity在切换。
* singleTask的作用:保证整个栈中只有一个该Activity的实例,第一次启动是创建新的,以后都不会创建而是返回。
.singleInstance:设为此模式的Activity会有一个自己独立的任务栈,该Activity的实例只会创建一个,保存在独立的任务栈中,这个任务栈不同于非单例模式的Activity的任务栈,不是单例模式则所有的Activity都保存在同一个任务栈,不是单例模式的Activity启动多次则会在任务栈中有多个。
*singleInstance的作用:保证整个系统的内存中只有一个该Activity的实例,不同的应用使用同一个activity,10个应用启动都是同一个Activity,例如打电话时启动的都是同一个打电话的Activity。 ---
#横竖屏的切换
* Activity在横竖屏切换时会销毁重建,目的就是为了读取新的布局文件(横竖屏是有2套布局文件的)
* 写死方向,不允许切换 android:screenOrientation="portrait"
android:screenOrientation="landscape"
* 配置Activity时添加以下属性,横竖屏切换时就不会销毁重建 android:configChanges="orientation|keyboardHidden|screenSize"
//设置当前Activity的方向,使用代码控制横竖屏(onCreat方法中写)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
---
#Activity返回时传递数据
* 请求码:用来区分数据来自于哪一个Activity
* 结果码:用来区分,返回的数据时属于什么类型 #掌握开启activity获取返回值
###从A界面打开B界面, B界面关闭的时候,返回一个数据给A界面
步骤:
. 开启activity并且获取返回值 startActivityForResult(intent, );
. 在新开启的界面里面实现设置数据的逻辑 Intent data = new Intent();
data.putExtra("phone", phone);
//设置一个结果数据,数据会返回给调用者
setResult(, data);
finish();//关闭掉当前的activity,才会返回数据 . 在开启者activity里面实现方法
onActivityResult(int requestCode, int resultCode, Intent data)
通过data获取返回的数据
. 根据请求码和结果码确定业务逻辑
MainActivity:
package com.itheima.getresult;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} public void click(View c){
//跳转至选择联系人Activity
Intent intent = new Intent(this, ContactActivity.class);
// startActivity(intent);
//用这个api启动的Activity,告诉系统在ContactActivity销毁时会返回数据,系统会回调onActivityResult
startActivityForResult(intent, 10);
} public void click2(View v){
//跳转至选择快捷回复的Activity
Intent intent = new Intent(this, CallbackActivity.class);
startActivityForResult(intent, 20);
}
//如果有Activity在销毁时返回了数据,那么就会调用此方法来接收数据
//requestCode:用来区分数据来自于哪一个Activity
//resultCode:用来区分返回的数据是什么类型的
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
String name = data.getStringExtra("name");
if(requestCode == 10){
EditText et = (EditText)findViewById(R.id.et);
et.setText(name);
}
else if(requestCode == 20){
EditText et_content = (EditText)findViewById(R.id.et_content);
et_content.setText(name);
}
}
}
配置Activity
<activity android:name="com.itheima.getresult.ContactActivity"></activity>
<activity android:name="com.itheima.getresult.CallbackActivity"></activity>
CallbackActivity:
package com.itheima.getresult;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView; public class CallbackActivity extends Activity {//显示一个列表lv
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contact);
ListView lv = (ListView) findViewById(R.id.lv);
final String[] objects = new String[]{
"免谈,没戏,滚犊子",
"媳妇我错了,求原谅",
"老子才是一家之主"
};
lv.setAdapter(new ArrayAdapter<String>(this, R.layout.item_listview, R.id.tv, objects));
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent data = new Intent();
data.putExtra("name", objects[position]);
setResult(2, data);
finish();
}
});
}
}
ContactActivity:
package com.itheima.getresult;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView; public class ContactActivity extends Activity {//显示列表lv的Activity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contact);
ListView lv = (ListView) findViewById(R.id.lv);
final String[] objects = new String[]{
"小志",
"逼哥",
"世界级XXX",
"国服第一"
};
lv.setAdapter(new ArrayAdapter<String>(this, R.layout.item_listview, R.id.tv, objects));
//给listview设置条目的点击侦听
lv.setOnItemClickListener(new OnItemClickListener() {
//当某个条目被点击时,此方法调用
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
//Activity返回时传递数据,也是通过意图对象
Intent data = new Intent();
//把要传递的数据封装至意图对象中
data.putExtra("name", objects[position]);
//当前Activity销毁时,data这个意图就会传递给启动当前Activity的那个MainActivity
setResult(1, data);
//销毁当前Activity,回到上次的MainActivity,
finish();
}
});
} @Override//点击返回键执行的操作也就是调用finish(),
public void onBackPressed() {
super.onBackPressed();
}
}
在一些特殊的应用程序常见下,比如游戏,不希望横竖屏切换activity被销毁重新创建
需求:禁用掉横竖屏切换的生命周期
1. 横竖屏写死
android:screenOrientation="landscape"
android:screenOrientation="portrait"
2. 让系统的环境 不再去敏感横竖屏的切换。
android:configChanges="orientation|screenSize|keyboardHidden"
---
Activity清单文件设置了Data属性则java代码里面一定要传Data,如果清单文件没有设置Data则java代码不能传Data,如果清单文件没有设置Data属性而java代码要传数据则用Intent传数据。
清单文件会优先加载,如果在清单文件设置了横竖屏写死,而java代码设置了不写死,则java代码会覆盖清单文件,使得横竖屏不写死。
android83 Activity的生命周期,启动模式,返回时传递数据的更多相关文章
- Activity的生命周期& 启动模式
1.Activity的生命周期 生命周期这个事情,是android工程师最基础的知识,所以今天要讲的是一些不一样的东西. 1.1 OnStart,OnResume,OnPause,OnStop 他们的 ...
- Day2 Activity生命周期/启动模式/最佳实践
Android是使用任务(Task)来管理活动的,这个栈被称作返回栈(Back Stack). Activity类中定义了7个回调方法: onCreate().在活动第一次被创建时调用,应该在这个方法 ...
- android 学习随笔十五(Activity的生命周期与摧毁时返回数据 )
1.Activity的生命周期 onCreate:创建时调用 onStart:在屏幕上可见,但是还没有获得焦点 onResume:可见并且获得焦点 onPause:可见,但是失去焦点 onStop:不 ...
- 无废话Android之activity的生命周期、activity的启动模式、activity横竖屏切换的生命周期、开启新的activity获取他的返回值、利用广播实现ip拨号、短信接收广播、短信监听器(6)
1.activity的生命周期 这七个方法定义了Activity的完整生命周期.实现这些方法可以帮助我们监视其中的三个嵌套生命周期循环: (1)Activity的完整生命周期 自第一次调用onCrea ...
- 《Android开发艺术探索》读书笔记 (1) 第1章 Activity的生命周期和启动模式
第1章 Activity的生命周期和启动模式 1.1 Activity生命周期全面分析 1.1.1 典型情况下生命周期分析(1)一般情况下,当当前Activity从不可见重新变为可见状态时,onRes ...
- Android开发艺术探索笔记——第一章:Activity的生命周期和启动模式
Android开发艺术探索笔记--第一章:Activity的生命周期和启动模式 怀着无比崇敬的心情翻开了这本书,路漫漫其修远兮,程序人生,为自己加油! 一.序 作为这本书的第一章,主席还是把Activ ...
- 一、Activity的生命周期和启动模式
1.Activity的生命周期 1.1.典型情况下的生命周期 在有用户参与的情况下,Activity所经过的生命周期的改变. Activity会经历如下生命周期: onCreate-onRestart ...
- 第一章:Activity的生命周期和启动模式
Activity是Android中四大组件之首,所以需要重视,尤其是启动方式,在AndroidManifest.xml中的注册信息 (一)Activity的生命周期 1.1.1 正常情况下的生命周期 ...
- 十分钟掌握Activity的生命周期与启动模式
1. Activity的生命周期 正常情况下的Activity生命周期如下图所示(来自Android Developer): 当资源相关的系统配置变更时(比如设备屏幕方向改变,键盘可见性变化),会导致 ...
随机推荐
- Qt HTTP内部构架
QUrl url("http://qt.gitorious.org"); QNetworkRequest request(url); QNetworkAccessManager m ...
- Java多线程初学者指南(12):使用Synchronized块同步变量
我们可以通过synchronized块来同步特定的静态或非静态方法.要想实现这种需求必须为这些特性的方法定义一个类变量,然后将这些方法的代码用synchronized块括起来,并将这个类变量作为参数传 ...
- 两台CISCO2691测试静态路由汇总,浮动静态路由和负载分担静态路由配置
Dynagen的配置文件内容: #Lab - autostart = False [localhost] [[]] ram = image = C:\Program Files (x86)\Dynam ...
- Android 基础知识点(持续更新)
一.AndroidManifest 每一个安卓工程都有AndroidManifest.xml的配置文件,在所有项目中该名称都不会变.该文件是Android工程的一个全局配置文件,所有在Android中 ...
- 抽象类 接口 虚函数(C++模拟,个人见解)
1.抽象类里面可以有非抽象方法但接口里只能有抽象方法声明方法的存在而不去实现它的类被叫做抽像类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实 ...
- 透过表象看本质!?之二——除了最小p乘,还有PCA
如图1所示,最小p乘法求得是,而真实值到拟合曲线的距离为.那么,对应的是什么样的数据分析呢? 图1 最小p乘法的使用的误差是.真实值到拟合曲线的距离为 假如存在拟合曲线,设直线方程为.真实值到该曲线的 ...
- logstash 贪婪匹配
05:50:47 192.168.5.116 GET /Hotel/HotelDisplay/cncqcqb230 - 80 - 192.168.9.2 Mozilla/5.0+(Macintosh; ...
- jdk jre jvm 关系
很多朋友可能跟我一样,已经使用JAVA开发很久了,可是对JDK,JRE,JVM这三者的联系与区别,一直都是模模糊糊的. 今天特写此文,来整理下三者的关系. JDK : Java Development ...
- op论坛,分支
http://www.arm9home.net/thread.php?fid=68 http://www.openwrt.org.cn/bbs/forum.php https://dev.openwr ...
- 20个可以帮你简化iOS app开发流程的工具
这里推荐20个可以帮你简化iOS app开发流程的工具.很多开发者都使用过这些工具,涉及原型和设计.编程.测试以及最后的营销,基本上涵盖了整个开发过程. 原型和设计 有了一个很好的创意后,你要做的不是 ...