• 【转】Android Activity原理以及其子类描述,androidactivity


       

    Android Activity原理以及其子类描述,androidactivity

    简介

    Activity是Android应用程序组件,实现一个用户交互窗口,我们可以实现布局填充屏幕,也可以实现悬浮窗口。一个app由很多个Actvitiy组合而成,它们之间用intent-filter区别主次关系。
    下面将简单介绍Activity以及其子类和其它界面。

    详情
    1、Activity

    2、ListActivity

    3、ActivityGroup

    4、TabActivity

    5、PreferenceActivity

    6、FragmentActivity

    7、ListFragment

    8、NativeActivity

    9、ExpandableListActivity

    10、LauncherActivity

    11、AliasActivity




    12、PreferenceFragment



    13、ActivityCompat

    14、ActivityUnitTestCase




    Activity 管理

    目前涉及到Activity管理的类就两个:1、LocalActivityManager 2、ActivityManager。它们分别做了什么呢?

    生命周期

    这里有三个比较关键的生命周期。

    从最初调用onCreate(Bundle)到最终调用onDestroy()称为完整生命周期。Activity会在onCreate()进行所有“全局”状态的设置,在onDestroy()中释放所有持有的资源。举个例子,如果它有一个从网络上下载数据的后台线程,那他可能就会在onCreate()中创建这个线程并在onDestroy()中停止这个线程。

    从activity调用onStart()开始,到调用对应的onStop()为止称为可见生命周期。在这段时间内用户可以在屏幕上看到这个activity,尽管并不一定是在前景也不一定可以和用户交互。在这两个方法之间你可以维护那些activity在用户显示时所需的资源。举个例子来说,你可以在onStart()中注册一个IntentReceiver来监控那些可以对你的UI产生影响的环境改变,当你的UI不继续在用户面前显示时你可以在onStop()中注销这个IntentReceiver。每当activity在用户面前显示或者隐藏时都会调用相应的方法,所以onStart()和onStop()方法在整个生命周期中可以多次被调用。

    从activity调用onResume()开始,到调用对应的onPause()为止称为前景生命周期,这段时间activity处于其他所有activity的前面,且与用户交互。一个activity可以经常在resumed和paused状态之间转换——例如手机进入休眠时、activity的结果返回时、新的intent到来时——所以这两个方法中的代码应该非常的简短。

    下面的Activity方法定义了activity完整的生命周期。他们全都是hook方法,你可以重载这些方法从而使activity在状态改变时执行你所期望的操作。所有activity都应该实现自己的onCreate(Bundle)方法来进行初始化设置;大部分还应该实现onPause()方法提交数据的修改并且准备终止与用户的交互。尽管我们计划在系统中添加更多的工具来管理应用,现在大多activity仍需要实现onFreeze()并且在onCreate(Bundle)中执行对应的状态恢复。其他的方法可以在需要时进行实现,当实现这些方法的时候需要注意的是一定要调用父类中的对应方法。

    android的activity类与intent的问题

    每个Activity都需要一个类来继承,
    Activity你可以理解成一个应用场景,如果你想像成web网页,那么它就是一个页面。
    多个activity之间可以跳转,就像网页之间相互跳转一样。你只需要设置Intent,不需要GetIntent
    GetIntent是系统做的事情,系统收到你的Intent意图,会自动生成你想要跳到的那个页面的类对象实例,并自动回调该类的Oncreate方法,你只要在该Oncreate方法里写下你那个页面的UI初始化工作就可以了。

    跳转可以像你说的那样使用Intent机制来实现:
    Intent intent = new Intent();
    intent.setClass(this, Page.class);
    this.startActivity(intent);
    这样就可以了。关键是setClass方法, 参数一是当前这个Activity也就是当前页面的类,参数二是另一个页面的class

    为什么是class而不是object对象呢? 因为Android希望你不要去实例new一个页面对象,而是告诉系统你要跳转到哪个页,由系统帮你new一个该页面的对象。然后系统帮你跳过去,这个过程你不要运控制就好了。

    继续:
    当this.startActivity方法执行后,页面就会从当前页跳转到你指定的下一页,这我的例子中,那个页叫Page ,它也是extends Activity的一个类,

    有一个前提,所有的Activity(包括这个Page)都必须实例Activity的抽像方法OnCreate();因为Activity是抽象类,而onCreate又是抽像方法,所以你必须实现,填完整这个方法,在里面写点东西,一般都是生成一些,按钮,菜单,图片,文字等进行界面的初始化。

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    instance=this;
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    this.setContentView(R.layout.main);
    //TODO 
    //your code
    }

    同样还有Onstop,onResume等方法可以实现,但他们不是抽像方法,可以选择性的实现。不强制。

    至于在xml中的配置是这样的,你需要填所有的activity页面类的路径
    <application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".Mstar"
    android:label="@string/app_name">
    <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="an......余下全文>>

    from:http://www.android100.org/html/201508/19/174311.html

  • 相关阅读:
    Linux常用命令记录
    Python写入数据至Excel文件中--学习笔记
    python操作mysql数据库封装类
    @property和@score.setter的用法--学习记录
    python3操作mysql数据库时,新增含有中文的数据时不成功但没报错,解决记录
    关于springmvc+maven项目引入css文件
    安全测试:xss注入方法
    报错记录:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
    uiautomatorviewer.bat报错:Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncExceptio
    面向对象15.2String类-构造函数
  • 原文地址:https://www.cnblogs.com/xuan52rock/p/5394623.html
Copyright © 2020-2023  润新知