Activity生命周期和Activity之间传参

来源:互联网 发布:淘宝联盟一键同步功能 编辑:程序博客网 时间:2024/06/06 05:10

Activity的应用程序的生命周期是被统一掌控的,因为当你在进行一应用程序是,可能会有人发短信进来,或者有谁打电话给你,抑或该应用程序又调用了 其他应用程序,这时,系统将会中断当前的程序,优先服务短信、电话或是被调用的程序。还有,系统不允许占用过多的资源,所以当资源不足是也有可能被结束。

 

public class MyActivity extends Activity {
   protected void onCreate(Bundle savedInstanceState);
      protected void onStart();
      protected void onResume();
      protected void onPause();
      protected void onStop();
      protected void onDestroy();

 

1.最容易被清掉的是empty process,空进程是指那些没有Activity与之绑定,也没有任何应用程序组件(如Services或者IntentReceiver)与之绑定的进程,也就是说在这个process中没有任何activity或者service之类的东西,它们仅仅是作为一个cache,在启动新的Activity时可以提高速度。它们是会被优先清掉的。因此建议,我们的后台操作,最好是作成Service的形式,也就是说应该在Activity中启动一个Service去执行这些操作。

 

2.接下来就是background activity了,也就是被stop掉了那些activity所处的process,那些不可见的Activity被清掉的确是安全的,系统维持着一个LRU列表,多个处于backgroundactivity都在这里面,系统可以根据LRU列表判断哪些activity是可以被清掉的,以及其中哪一个应该是最先被清掉。不过,文档中提到在这个已被清掉的Activity又被重新创建的时候,它的onCreate会被调用,参数就是onFreeze时的那个Bundle。不过这里有一点不明白的是,难道这个Activitykilled时,Android会帮它保留着这个Bundle吗?

3.然后就轮到service process了,这是一个与Service绑定的进程,由startService方法启动。虽然它们不为用户所见,但一般是在处理一些长时间的操作(例如MP3的播放),系统会保护它,除非真的没有内存可用了。

4.接着又轮到那些visible activity了,或者说visible process。前面也谈到这个情况,被PausedActivity也是有可能会被系统清掉,不过相对来说,它已经是处于一个比较安全的位置了。

5.最安全应该就是那个foreground activity了,不到迫不得已它是不会被清掉的。这种process不仅包括resume之后的activity,也包括那些onReceiveIntent之后的IntentReceiver实例。

 

 

如果要从Target往TestBundle回传数据/信息, 可以在TestBundle里面:
startActivityForResult(intent, 1333); // 1333是request code

然后在Target里面, 回传的时候:
Intent data = new Data();
data.putExtra("msg", "my message");
setResult(RESULT_OK, data);
finish();

在TestBundle里出来传回来的数据/信息:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    String msg = data.getExtras().getString("msg");
// ...
}

 

Intent intent = new Intent();

intent.putExtra("name", editText.getText().toString());

intent.setClass(ActivityLifecycle.this, AlertDialog.class);

通过setClass方法,直接告诉Android,此Intent交由AlertDialog处理,也可以通过setComponent()、setClassName()等方法来做同样的事情。

当一个Intent的所有说明,都被Activity的intent-filter接受时,这个Activity就是候选人之一。如果有多个Activity成为候选人,那么在程序运行的时候Android提示你从多个Activity中手动选择一个来作为最终的intent接收执行者。

原创粉丝点击