ios+android+次留,边做iOS边学Android(三):Activity生命周期+通信

边做iOS边学Android(一):新建一个project

边做iOS边学Android(二):认识几个常用的控件

趁着不忙赶紧多写点,鬼知道后面又有什么需求要忙...

这次就看一下Activity的生命周期,以及不同Activity之间的通信吧。

开始:

1 新建一个项目,ActivityLifeCyclePractice。然后在MainActivity里添加一些生命周期的方法,Activity的生命周期方法有onCreate、onStart、onRestart、onResume、onPause、onStop、onDestroy。

1.1 创建时:onCreate(viewDidLoad)、onStart(viewWillAppear?)、onResume(viewDidAppear?),在onResume时是前台可交互状态。

1.2 进入后台,调用onPause:Activity不在栈顶,但是栈顶的Activity半透明或者不覆盖全屏;onStop:不在栈顶,被完全覆盖,成员信息保留,不执行代码。

1.3 从后台进入前台,调用onRestart、onStart、onResume。

1.4 应用销毁,调用onPause、onStop、onDestroy。

public static final String TAG = "MainActivity";

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

Log.d(TAG,"onCreate");

}

@Override

protected void onRestart(){

super.onRestart();

Log.d(TAG,"onRestart");

}

@Override

protected void onStart(){

super.onStart();

Log.d(TAG,"onStart");

}

@Override

protected void onResume(){

super.onResume();

Log.d(TAG,"onResume");

}

@Override

protected void onPause(){

super.onPause();

Log.d(TAG,"onPause");

}

@Override

protected void onStop(){

super.onStop();

Log.d(TAG,"onStop");

}

@Override

protected void onDestroy(){

super.onDestroy();

Log.d(TAG,"onDestroy");

}

Log.d就是打印debug级别的日志,.d可以改,看日志等级了。2个参数,第一个是筛选用的字符串,后面的就是打印的内容。在底部有个logcat,展开以后就是这样。跑起来,模拟器底下的back按钮会销毁当前的Activity。

ce50bb50e07c

three_Log.jpeg

2 接下来看一下Activity之间的传值

2.1 再创建一个NormalActivity,在layout下新建一个normal_layout,layout里新加一个TextView,代码就不贴了。

2.2 在manifest里注册这个Activity,之前老忘。不用多想,跟main的Activity同级的啦(都是Activity嘛)。

* 2.3 在NormalActivity的onCreate里添加setContentView(R.layout. normal_layout);

* 2.4 我们是从mainActivity跳到NormalActivity里,所以在main上加个按钮(第二回里面有说咋加 )。点击事件什么的也都写好,然后在点击事件里:

3 使用Intent启动、传值

3.1 Intent是一个好东西。它可以启动Activity,启动Service,启动Broadcast。(中间一个不知道干嘛的,总会知道的,第三个就是通知嘛...)

3.2 使用Intent启动Activity,可以分为显示跟隐式创建,显式的简单些:

3.2.1 喏,就是下面这样,在按钮的点击里加上就可以跳过去了。之所以说是显式是因为目标活动很明显摆在那了。

Intent intent = new Intent(当前Activity.this, 目标Activity.class);

startActivity(intent);

* 3.2.2 隐式就麻烦一些,第一篇里边说过我们的main的Activity有个,隐式创建也要用到这个,就是在manifest里对应的Activity标签内部加一个筛选。里边可以有3种标签、、。

action只能有一个,category可以有多个。action的name自己定,category就是这个值了(没深究,没有category会💥,Therefore, activities that are willing to receive implicit intents must include "android.intent.category.DEFAULT" in their intent filters. 谷歌爹说的)

回到MainActivity里按钮的点击里把刚才显示的换掉

Intent intent = new Intent("start_a_handsome_activity");

startActivity(intent);

* 3.3使用Intent传值,传个字符串过去,就是这样

intent.putExtra("key","劳资传过来的值");

* 3.4 在NormalActivity里(刚才有创见过TextView),显示一下传过来的值

Intent intent = getIntent();

String text = intent.getStringExtra("key");

TextView textView = (TextView) findViewById(R.id.normal_textView);

textView.setText(text);

ce50bb50e07c

three_intent_put.png

* 3.5 在第二个活动里把值传回上一个(底下的back按钮),因为这个时候第二个会被销毁,所以:

* 3.5.1 这个时候就不能用startActivity()方法启动活动了,要用

startActivityForResult(intent,10086);

第一个是intent,第二个是requestCode,一个int值,唯一就行。

然后在NormalActivity里加一个按钮,里边给intent赋值,然后调用setResult把intent传回去,有2个参数,第一个是resultCode,一般就选2个值RESULT_OK或RESULT_CANCLED。然后调用finish()销毁NormalActivity

Button btn = (Button) findViewById(R.id.destroy_button);

btn.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Intent intent = getIntent();

intent.putExtra("second","这是从Normal里传过来的");

setResult(RESULT_OK,intent);

finish();

}

});

然后第一个MainActivity里会走回调

@Override

protected void onActivityResult(int requestCode, int resultCode,Intent data){

switch (requestCode){

case 10086:

if (resultCode == RESULT_OK){

String text = data.getStringExtra("second");

Toast.makeText(MainActivity.this,text,Toast.LENGTH_SHORT).show();

}

break;

default:

}

}

不写在onDestory里是因为第一个Activity的回调先走,再走onDestory,这样resultCode就一直是RESULT_CANCLED

ce50bb50e07c

three_on_activity_result.png

intent作为初学者还是得好好看看,

里的可以用来指定可以响应的数据类型,例:

Intent intent = new Intent(Intent.ACTION_VIEW);

intent.setData(Uri.parse(“http://www.baidu.com”));

startActivity(intent)

这是打开一个网页,Intent.ACTION_VIEW是系统内置的,setData方法传一个Uri对象,标签可以筛选:

android: scheme(http部分)/host(www.baidu.com部分)/port/path/mimeType。

我知道的Intent也就这么点。一下子全看了也记不了,倒不如用到的时候再看。下一次就说说布局吧,毕竟先搭出来个页面有一些成就感=。=

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值