Android学习第二天

intend

  大家都知道intent分为显示和隐式,其作用就是在各个活动之间进行穿梭,即在各个活动之间传递数据。一般被用于启动活动、启动服务以及发送广播等场景,本节首先介绍启动活动上。
  首先intent有多个构造函数其中之一是`Intent(Context packageContext,Claass<?> cls)`,其中有两个参数,第一个参数官方解释是提供一个用于启动活动的上下文,第二个参数Class是指定想要想要启动的活动目标,用我自己的话来解释就是在第一个活动的基础上启动第二个活动,即实现在界面上的转换,代码示例如下:
 button1.setOnClickListener(new View.OnClickListener() {  //注册监听器,点击按钮时执行监听器中的onClick方法
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this,SecondActivity.class);
                startActivity(intent);
            }
        });
  这便是显示intent的简单介绍和用法。

  接下来就是隐式intent的用法。
  隐式intent的用法简而言之就是一个action配对一个category,在manifests中记得在intent-filter标签下添加action和category,在按钮点击事件中修改代码如下:
     button1.setOnClickListener(new View.OnClickListener() {  //注册监听器,点击按钮时执行监听器中的onClick方法
            @Override
            public void onClick(View view) {
                Intent intent = new Intent("com.example.activitytest.MY_CATEGORY");
                intent.addCategory("com.examole.activitytest.MY_CATEGORY");
                startActivity(intent);;
}
});

更多隐式intent的用法

1.调用网页,代码示例如下:

Button button1 = (Button) findViewById(R.id.button_1);  //通过findViewByid这个函数来确定Toast触发点在哪,即传入的参数
        button1.setOnClickListener(new View.OnClickListener() {  //注册监听器,点击按钮时执行监听器中的onClick方法
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(Intent.ACTION_VIEW); //指定intent的动作为ACTION_VIEW这是android内置的动作
                intent.setData(Uri.parse("http://www.baidu.com"));
                startActivity(intent);
            }
        });
还可以在manifests中添加<data>标签进行指定当前活动能相应什么样的类型,具体解释如下:
android:scheme 指定数据的协议部分,如http://   还可以有geo显示地理位置、tel拨打电话
android:host  用于指定数据的主机名部分,如www.baidu.com
android:port 用于指定数据的端口部分,一般紧随主机名之后
android:path 用于指定主机名和端口名后面的部分,如一段网址中跟在域名之后的内容
android:mimeType 用于指定可以处理的数据类型,允许使用通配符的方式进行指定

2.先下一个活动传递数据
比如我们想把一个字符串从一个活动事件中传到另一个活动事件,分为取、传两部分,代码如下:

 button1.setOnClickListener(new View.OnClickListener() {  //注册监听器,点击按钮时执行监听器中的onClick方法
            @Override
            public void onClick(View view) {
                String data = "Hello SecondActivity";
                Intent intent = new Intent(MainActivity.this,SecondActivity.class);
                intent.putExtra("extra_data",data);
                startActivity(intent);
            }

});
public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        Intent intent = getIntent();
        String data = intent.getStringExtra("extra_data");
        Log.d("SectionActivity",data);
    }
}
   第一个代码片段中putExtra()中有两个参数,第一个自己理解来说就是存放要传递的字符串,用于后面SecondActivity取;在第二段代码片段中有一个getStrigExtra()用来获取数据,但是根据不同的数据类型中间的值不同,整型就是getIntExtra()以此类推。

活动的生命周期

1.返回栈
Android中的活动是可以堆叠的,即在启动一个新活动的同时就会覆盖在原活动之上,按下back键就销毁最上面额活动。
Android是用任务来管理活动的。就是用栈,众所周知栈是一种先进后出的数据结构,所以利用这种特性,在一个活动实现完毕时,就被销毁或者出栈,下一个元素置于栈顶。
2.活动的生存期

onCreat():在活动第一被创建时调用。在本方法中完成活动的初始化操作,比如家在布局、绑定事件。
onStart():活动由不可见变为可见时的调用。
onResume():在活动准备好和用户进行交互时调用,此时活动一定位于返回栈的栈顶,并处于运行状态。
onPause():在系统准备启动或恢复另一个活动时调用。
onStop():在活动完全不可见的时候调用,onPause区别就是,如果活动是一个对话框形式的就会调用onPause().
onDestory():在活动被销毁之前调用,之后状态变为销毁。
onRestart():活动由停止变为运行状态之前调用。
   完整生存期。经历onCreat和onDestory之间的活动。一个活动在inCreat之中完成初始化操作,在onDestory中完成内存释放操作。
   可见生存期。在onStart和onStop之间的活动。在此期间活动对于用户总是可见的,可能无法进行交互;在onStart中对活动进行加载,在onStop中对资源进行释放。
   前台生存期。在onResume和onPause之间的活动。活动总是处于运行状态,可以与用户就能行交互,我们看的最多的状态。

活动被回收了怎么办
经过查阅文档可知,在Activity中由=有这样一个方法onSavaInstanceState(),这个方法保证活动在回收之前会被调用,在MainActivity中添加如下代码即可:

  @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        String tempData = "something  you just typed";
        outState.putString("data_key",tempData);
    }
   既然数据被保存下来了,那么我们怎样将其回复呢?就是在onCreat()方法中,重写onCreat()方法,代码如下:
   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG,"onCreat");
        setContentView(R.layout.activity_first);
        if(savedInstanceState!=null){
            String tempData = savedInstanceState.getString("data_key");
            Log.d(TAG,tempData);
            ...
        }

活动的启动模式
启动模式分为四种standard、singleTop、singleTask、singleInstance,我们可以在AndroidMainActivity中通过给activity标签指定android:launchMode属性来选择启动模式。

standard
活动默认的启动模式,在不进行显示指定的情况下,我们都是在使用这种启动模式,这个模式不在乎你的活动是不是在栈中,每次启动都会创建该活动的一个实例。
singleTop
在检测到该活动为栈顶活动时,则认为可以直接使用它,不会再创建新的活动实例,但是若活动未处于栈顶则会创建一个新的实例。
singleTask
每次启动该活动时系统首先会在返回栈中检查是否存在该活动实例,如果存在则直接使用,并把这个活动之上的所有活动统统出栈,就创建一个新的实例。

singleInstance
若指定为此模式,活动会启用一个新的返回栈来管理活动,主要是用来解决共享活动的实例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

li_jeremy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值