Android做了一年了,回头来看看Activity

Activity跳转主要有两种方式,如下所示:

其实精华,在这里,onResume,才是安卓程序员实际操作的东东。^_^

命周期的每一个阶段都表示为金字塔上的一个台阶,当系统创建一个新的activity时,每一个回调函数都把activity的状态向上挪一步。

  金子塔的最顶层就是activity运行在前景模式下,就是直接运行的状态。

  当用户离开activity时,系统调用另一些回调函数,将activity的状态从金字塔中一步一步移下来。有些情况下,activity只移动一部分,并没有完全到底,这些情况下仍然可以移动回顶部。

  注意这些状态中只有三个状态是静态(static)的,意味着activity只有在这三个状态下能停留一段时间:

    Resumed:foreground,用户可交互running state

对于fragment的初始化,比如读取本地数据库操作,我们可以放在这里进行

    Paused:部分被遮挡,不能接收用户输入也不能执行代码,另一个半透明或者小的activity正挡在前面。

弹出日历,popupwindow,活着对话框型的activity。

    Stopped:activity完全被遮挡,不能被用户看到,activity被认为在background,当Stopped的时候,activity实例的状态信息被保留,但是不能执行任何代码。

启动新的acitivity,或全屏对话框,全屏的activity。stop还不至于被destroy,所以onKeyDown中,判断KeyCode_Back之后,可以进行对应的reStart操作。

  其他状态都是转换状态,系统会很快调用其他相应的回调函数离开这些状态。比如系统调用onCreate()之后,会很快调用onStart(),之后是 onResume()。

还有比如当启动和退出Dialog时,Activity的状态始终未变,可见,Dialog实际上属于Acitivity内部的界面,不会影响Acitivty的生命周期。

1. 两个Activity之间普通跳转

从一个Activity跳至另一个Activity,需要用到Intent 这个东东,

2. 从源Activity跳转至目标Activity,目标Activity再回传值给源Activity

在Activity跳转中,如果需要Activity的回传值,再进行其他操作,怎么实现呢?

1). 源Activity重写onResume()方法

这种方式一般情况下是不推荐,但是针对一些特殊情况推荐使用,毕竟android中Activity跳转时,一般接收的是值类型的信息,这个方法可以更全面的接收回传的信息。这个就不做解释了,做项目时用过,还比较好用,就是代码写的时候会相对复杂些。

2). 源Activity重新onActivityResult()方法

这种方式还是推荐使用的,通过重写onActivityResult()方法,可以方便的接收目标Activity的回传值,关键是注意Activity跳转的方式,源Activity跳转至目标Activity采用startActivityForResult()方法,而目标Activity关闭跳会源Activity时采用setResult()方法。

这里要实现,当前页面,选中地址的那个布局,点击后跳转到地址列表的activity,在地址列表的activity,选中一项之后,直接返回地址数据。

Demo代码如下:

代码片段

第一个activity中

case R.id.score_no_address_layout:

    if (userEntity != null) {

    Intent intent2 = new Intent(this, MeAddressActivity.class);

    intent2.putExtra(KEY, VALUE);

    startActivityForResult(intent2, 2);

    } else {

    getUser();

    }

第一个activity中

接受第二个activity传回的值,重写onActivityResult()

// 通过结果码,将地址页面选定的地址,返回到订单结算页

@Override

protected void onActivityResult(int arg0, int arg1, Intent arg2) {

// TODO Auto-generated method stub

super.onActivityResult(arg0, arg1, arg2);

if (arg1 == RESULT_OK) {

address = (MeAddressEntity) arg2

.getSerializableExtra(MeAddressActivity.ADDRESS);

setUserAddress(address);

scoreErrorLogText.setVisibility(View.GONE);

}

}

而在地址列表的activity中,这么发送的

//一个自定义的listview的监听器

class ItemClick implements OnItemClickListener{

@Override

public void onItemClick(AdapterView<?> arg0, View arg1, int position,

long arg3) {

//获得点击的item的实体

MeAddressEntity entity = (MeAddressEntity) mAdapter.getItem(position);

if(entity!=null){

Intent intent = new Intent();

//将序列化的实体,放入intent

intent.putExtra(ADDRESS, (Serializable)entity);

MeAddressActivity.this.setResult(RESULT_OK, intent);

MeAddressActivity.this.finish();

MeAddressActivity.this.overridePendingTransition(R.anim.activity_back_input,

R.anim.activity_back_out);

}

}

3.几个非常有用的方法

a,.onFocusChanged却只能在View中重写。该方法是焦点改变的回调方法,当某个控件重写了该方法后,当焦点发生变化时,会自动调用该方法来处理焦点改变的事件。

比如当我们为了获取组件的宽度,就要在这个方法中使用。

b,onResume()下一个activity被关闭,返回当前activity时候,可以在这里刷新数据。

c,onDestroy(),清空缓存,比如照片缓存,(当然,现在都不清空了,360没事就把你干了)

时间: 2024-08-29 18:55:12

Android做了一年了,回头来看看Activity的相关文章

android:两个应用之间如何传值之activity

两个应用之间如何传值,其实这个标题太水了,专业的说法是"两个进程间如何传值",什么?!还不够专业,好吧,你淫了!"进程间通信"其实更专业,这回你总满意了吧!顺带说一下,简写成IPC:Inter-Process Communication. 兄弟们,如果你们从搜索引擎或者其他途径找到这篇文章的话,说明你的Android技术已经提升到一个很高的层次了哦,嘿嘿-为什么这么说呢?因为无论哪个平台,线程跟进程都是绝对的重点跟难点. 本文说的进程间传值只是进程间通信的一个特例,

Android学习路线(五)开启另一个Activity

在完成了 上一篇课程后,你已经有了一个应用.这个应用展示了一个包含一个文本框和一个按钮的activity(一个单独的界面).在这次的课程中,你将会通过在MainActivity中添加一些代码,来让当给你点击Send按钮时能够跳转到另一个activity中. 响应Send按钮 为了响应按钮的点击事件,打开fragment_main.xml 布局文件,然后在 <Button> 元素中加入android:onClick属性: <Button     android:layout_width=&

Android官方入门文档[4]启动另一个Activity

Android官方入门文档[4]启动另一个Activity Starting Another Activity启动另一个Activity This lesson teaches you to1.Respond to the Send Button2.Build an Intent 3.Create the Second Activity4.Receive the Intent5.Display the Message You should also read?Installing the SDK

Android项目实战(七):Dialog主题Activity实现自定义对话框效果

原文:Android项目实战(七):Dialog主题Activity实现自定义对话框效果 想必大家都用过Dialog主题的Activity吧,用它来显示自定义对话框效果绝对是一个非常不错的选择. 即把activity交互界面以Dialog的形式展现出来,Dialog主题的Activity大小将以内容的宽高来决定 <activity android:name=”MainActivity” android:theme=”@android:style/Theme.Dialog”> </acti

Android跨进程通信访问其他应用程序的Activity

访问其他应用程序的ActivityActivity既可以在进程内(同一个应用程序)访问,也可以跨进程访问.如果想在同一个应用程序中访问Activity,需要指定Context对象和Activity的Class对象,代码如下: Intent intent = new Intent(this, Test.class); startActivity(intent); Activity的跨进程访问与进程内访问略有不同.虽然它们都需要Intent对象,但跨进程访问并不需要指定Context对象和Activ

android webview点击返回键返回上一级activity

android webview点击返回键返回上一个activity 1 @Override 2 public boolean onKeyDown(int keyCode, KeyEvent event) { 3 // TODO Auto-generated method stub 4 if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { 5 return true; 6 } 7 return super

【Android】12.2 利用Intent启动和关闭Activity

分类:C#.Android.VS2015: 创建日期:2016-02-23 一.简介 Android应用程序中一般都有多个Activity,在Activity中,通过调用StartActivity方法,并在该方法的参数中传递Intent对象,就可以实现不同Activity之间的切换和数据传递. 通过StartActivity方法传递intent对象来启动另一个Activity时,可分为两类: l 显式启动:在创建的Intent对象中明确指定启动的是哪个Activity: l 隐式启动:安卓系统根

Android - Error:Calling startActivity() from outside of an activity context

Error:Calling startActivity() from outside of an activity context 本文地址: http://blog.csdn.net/caroline_wendy Android错误:Calling startActivity() from outside of an activity context requires the FLAG_ACTIVITY_NEW_TASK 在一个Activity外部调用本地的startActivity(),需要

我的Android 4 学习系列之创建应用程序和Activity:Manifest、Application、Activity

目录 介绍Android应用程序组件,以及使用这些组件构建的各种Android应用程序 Android应用程序的生命周期 如何创建应用程序Manifest 如何使用外部资源提供对位置.语言和硬件配置的支持 如何实现和使用自己的Application类 如何创建新的Activity 理解Activity的状态转换和生命周期 Android应用程序的组成部分 Android应用程序是由松散耦合的组件构成的,并使用应用程序Manifest绑定到一起. Manifest描述了每一个组件以及他们之间的交互

Android开发中java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx}

Android开发中java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx}: java.lang.NullPoi 错误信息字符串:java.lang.RuntimeException: Unable to start activity ComponentInfo{com.first/com.first.Game}: java.lang.NullPointerException 一般都会在Activity  o