Android学习之activity用法举例

  • Activity入门
    1,Activity生命周期中的四个状态
    活动状态:即该activity处于前台,用户可见,并获得焦点
    暂停状态:其他的activity或者Dialog位于前台,该activity任可见,但没有焦点
    停止状态:activity不可见,失去焦点
    销毁状态:activity所在的Dalvik进程被结束
    2,Activity完整生命周期内的7个回调方法
    情形1:只有一个activity
    这里包含了3个关键的生命周期循环:
    a,从oncreate()到OnDestory()的完整生命周期
    b,从onStart()到OnStop()的可视生命周期
    c,从onResume()到onPause()的前台生命周期,注意:这两个方法中的代码应该是轻量级的。
    情形2:多个activity
    这里回调方法的执行顺序,都是在第一个activity的onpause()方法与onstop()方法之间开启第二个activity;
    手机横屏的时候:会销毁当前的activity,然后重新创建。
    3.activity的两种启动方式:显式和隐式(打开系统的activity)
  • Activity中级
    1,在activity之间传递信息
    a,intent传递;
    b,Bundle传递基本数据类型的数据,还可以使用Bundle传递一个可以序列化的对象,使用putSerializable()或者一个小的Bitmap;但是Bundle传递数据是有大小限制的<0.5M。
    2,activity的启动模式:
    任务栈:简单说 就是一个存储activity的集合,便于activity回退管理。
    standard:只要来一个startActivity()就会创建一个activity;
    singtop:和standard相比,如果待启动的activity处于栈顶,就不创建,其余的情况,都同standard模式;
    后两种都是单实列模式:
    singtask:和singtop不同的是,如果待启动的activity处于栈顶,直接调用onNewIntent()方法,不在栈顶则弹去栈中该activity之上的所有activity。
    singInstance:A启动B,B为singInstance模式,会为B创建一个新的任务栈,再从B回到A,会重新创建A,而再次回到B,只是会调用onnewIntent()方法。
    总结:对于使用standard 模式的活动,系统不会在乎这个活动是否已经在返回栈中存在,每次启动都会创建该活动的一个新的实例。当活动的启动模式指定为 singleTop, 在启动活动时如果发现返回栈的栈顶已经是该活动, 则认为可以直接使用它,不会再创建新的活动实例。不过当 FirstActivity 并未处于栈顶位置时,这时再启动 FirstActivity,还是会创建新的实例的。使用singleTop 模式可以很好地解决重复创建栈顶活动的问题,但是如果该活动并没有处于栈顶的位置,还是可能会创建多个活动实例的。当活动的启动模式指定为 singleTask,每次启动该活动时系统首先会在返回栈中检查是否存在该活动的实例,如果发现已经存在则直接使用该实例,并把在这个活动之上的所有活动统统出栈,如果没有发现就会创建一个新的活动实例。
    3,关于activity的销毁
    当一个活动进入到了停止状态,是有可能被系统回收的。那么想象以下场景,应用中有一个活动 A,用户在活动 A 的基础上启动了活动 B,活动 A 就进入了停止状态,这个时候由于系统内存不足,将活动 A 回收掉了,然后用户按下 Back 键返回活动A, 会出现什么情况呢?其实还是会正常显示活动 A的, 只不过这时并不会执行 onRestart()方法,而是会执行活动 A 的 onCreate()方法,因为活动 A 在这种情况下会被重新创建一次。
    对于上面的情况,那么就面临这样的一个问题:即上一个活动的数据也就随之丢失。
    解决办法:对于这种情况,Activity 提供了一个 onSaveInstanceState()回调方法,这个方法会保证一定在活动被回收之前调用, 因此我们可以通过这个方法来解决活动被回收时数据得不到保存的问题。(注意:只能用于activity意外退出的情形,如果我们显示的终止一个activity系统并不会调用该方法)
    eg:在 MainActivity 中
    @Override
    protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    String data= "Hello";
    outState.putString("data", data);
    }(<a href="http://www.dztcsd.com/">资质代办</a>)
    而在oncreate()方法中我们可以重新获得被保存的数据。
    作者: 热爱生活的猫 
    来源:慕课网
    本文原创发布于慕课网 ,转载请注明出处,谢谢合作!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FragmentActivityAndroid 提供的一个特殊类型的 Activity,它可以在其中嵌入 Fragment。FragmentActivity 可以帮助我们更好地管理 Fragment 的生命周期和交互,同时兼容低版本的 Android 系统。 以下是使用 FragmentActivity 的步骤: 1. 继承 FragmentActivity 类 ```java public class MainActivity extends FragmentActivity { // ... } ``` 2. 在布局文件中定义 Fragment ```xml <FrameLayout android:id="@+id/fragment_container" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 在 FrameLayout 中指定一个 ID,用于在代码中找到该布局。 3. 在 FragmentActivity 中添加 Fragment ```java public class MainActivity extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 创建 Fragment 实例 MyFragment myFragment = new MyFragment(); // 添加 Fragment 到布局中 FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.add(R.id.fragment_container, myFragment); fragmentTransaction.commit(); } } ``` 在 onCreate() 方法中,首先通过 setContentView() 方法设置布局文件,然后创建 Fragment 实例并将其添加到布局中。使用 getSupportFragmentManager() 方法获得 FragmentManager 实例,使用 beginTransaction() 方法开启一个事务,使用 add() 方法将 Fragment 添加到布局中,并使用 commit() 方法提交事务。 4. Fragment 交互 在 Fragment 中可以定义接口,用于与 FragmentActivity 进行交互。在 FragmentActivity 中实现该接口,从而实现 Fragment 与 FragmentActivity 之间的交互。 ```java public class MainActivity extends FragmentActivity implements MyFragment.OnButtonClickListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // ... } // 实现接口方法 @Override public void onButtonClick() { // 处理点击事件 } } ``` 在 Fragment 中定义接口 ```java public class MyFragment extends Fragment { private OnButtonClickListener listener; public interface OnButtonClickListener { void onButtonClick(); } @Override public void onAttach(Context context) { super.onAttach(context); // 获取 Activity 实例 Activity activity = getActivity(); // 确认 Activity 实现了接口 if (activity instanceof OnButtonClickListener) { listener = (OnButtonClickListener) activity; } else { throw new ClassCastException(activity.toString() + " must implement MyFragment.OnButtonClickListener"); } } // ... } ``` 在 Fragment 中定义了一个 OnButtonClickListener 接口,并实现了 onAttach() 方法,该方法在 Fragment 与 Activity 绑定时自动调用。该方法中通过 getActivity() 方法获取 Activity 实例,并检查 Activity 是否实现了接口。如果实现了,则将 Activity 强制转换为 OnButtonClickListener 接口。如果没有实现,则抛出异常。 在 Fragment 中可以通过调用 listener.onButtonClick() 方法触发 Activity 中的 onButtonClick() 方法。从而实现 Fragment 与 Activity 之间的交互。 以上是使用 FragmentActivity 的基本步骤,你可以根据具体需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值