Android四大组件——Acvitity.txt

来源:互联网 发布:手机查经纬度软件 编辑:程序博客网 时间:2024/06/07 09:23
1——概述:1、Activity 是用户接口程序,原则上它会提供给用户一个交互式的接口功能。2、Activity本身没有没有页面, Activity类创建了一个窗口,通过setContentView(View)3、接口把UI放到activity创建的窗口上实现图形化。4、Activity之间通过Intent通信5、Android应用中每一个Activity都必须要在AndroidManifest.xml配置文件中声明,    否则系统将不识别也不执行该Activity(目前系统会自动注册)==================================================================================================================  2——生命周期的解释:onCreate    实例化 当Activity第一次启动的时候,触发该方法,完成初始化。onStart     启动  该方法的触发表示所属Activity将被展现给用户。onResume    交互  当一个Activity和用户发生交互的时候,触发该方法onPause     挂起  当一个正在前台运行的Activity因为其他的Activity需要前台运行而转入后台运行的时候,触发该方法。onStop      停止  一个活动不再需要展示给用户的时候,触发该方法。如果系统内存紧张,则会直接结束这个Activity,而不会触发 onStop 方法。所以如果有要保存的数据时,应该在onPause时做,可以认为onPause方法或许是活动触发的最后的方法,之后就无法主观控制了。onRestart   重启  当处于停止状态的Activity需要再次展现给用户的时候,触发该方法。onDestroy   销毁  当Activity销毁的时候,触发该方法。和 onStop 方法一样,如果内存紧张,系统会直接结束这个Activity而不会触发该方法。==================================================================================================================3——Acvitity的四种状态1、Active/Runing(活动的):一个新的Activity入栈后,它在屏幕最前端,处于栈的最顶端,处于可见并且可交互的激活状态。onCreate()、onStart() 、onResume() 函数调用的Activity都会变成foreground process(前景模式)正在运行的Activity。2、Paused(暂停):当 Activity 被另一个透明或者 Dialog 样式的 Activity 覆盖时的状态。此时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以它仍然可见,但它已经失去了焦点故不可与用户交互。在Activity窗口画面变为透明时,就会由onPause()函数掌控进入暂停状态。3、toped(停止):当 Activity 被另外一个 Activity 覆盖、失去焦点并不可见时的状态。在Activity窗口画面被其他Activity完全盖掉,窗口画面已经完全看不见时,则会进入onStop()停止状态。停止后的两种结果:一是直接被onDestroy()退出,该程序将完全关闭,无法再使用任何返回键回到该程序;另一个处理方式是当其他Activity需要内存时,这个background process会先被清除掉,释放出内存。4、Killed(待用):Activity 被系统杀死回收或者没有被启动时的状态。直接被onDestroy()退出,该程序将完全关闭,无法再使用任何返回键回到该程序;==================================================================================================================4——Acvitity的跳转:一、无返回值的跳转:            A启动B,无返回结果              使用startActivity(new Intent(当前Activity.this, 下一Activity.class))    代码样例:       Intent intent=new Intent(MainActivity.this,SecActivity.class);二、带返回值的跳转:    A启动B,B再返回A,由A接收B返回的结果    第一个Activity使用:startActivityForResult (Intent intent, int requestCode)跳转    (requestCode的值是自定义的,用于识别跳转的目标Activity)。    第二个Activity使用:setResult(int resultCode)或    setResult(int resultCode, Intent data)返回数据/结果。    第一个Activity使用:onActivityResult(int requestCode, int resultCode, Intent data)    接收返回的数据/结果    (requestCode就是startActivityForResult的requestCode,resultCode就是setResult里面的resultCode,返回的数据在data里面)。注意,    在setResult后,要调用finish()销毁当前的Activity,    否则无法返回到原来的Activity,就无法执行原来Activity的onActivityResult函数,看到当前的Activity没反应。    代码样例1:主页面的值带给子页面显示                intent.putExtra("content",content);                intent.putExtra("bean",phone);                startActivity(intent);    代码样例2:主页面接受子页面的参数值:      MainAcvitity:      public void onClick(View v) {                Intent intent=new Intent(MainActivity.this,SecActivity.class);                startActivityForResult(intent,request_nickname);    /**     * 重写onAcvitityRusult()方法     * @param requestCode 请求码     * @param resultCode    结果码     * @param data 传过来的数据     */    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        //首先判断请求码 然后判断结果码        if(requestCode!=request_nickname){//说明是设置的不是昵称            return;        }        if(resultCode==RESULT_OK){//说明用户输入了            btn_press.setText(data.getStringExtra("text"));        }else if(resultCode==RESULT_CANCELED){            Toast.makeText(MainActivity.this,"用户取消",Toast.LENGTH_SHORT).show();        }        super.onActivityResult(requestCode, resultCode, data);  SecAcvitity:        et_text= (EditText) findViewById(R.id.et_text);        btn_desgin= (Button) findViewById(R.id.btn_desgin);        btn_desgin.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                String name=et_text.getText().toString();                if(TextUtils.isEmpty(name)){//用户没有输入,结果码是取消                        setResult(RESULT_CANCELED);                }else {//如果输入不为空,执行带值跳转                    Intent intent=new Intent();                    intent.putExtra("text",name);                    setResult(RESULT_OK,intent);                }                SecActivity.this.finish();//结束当前页面,返回要跳转的页面AcvitityMain==================================================================================================================5——Acvitity中Intent的常用方法:public void startActivity(Intent intent)        启动一个Activity,并通过Intent传送数据public void startActivityForResult(Intent intent, int requestCode)      启动并接收另一个Activity程序回传数据,当requestCode大于0才可以触发onActivityResult()public Intent getIntent()       返回启动当前Activity程序的Intentprotected void onActivityResult(int requestCode, int resultCode, Intent data)       当需要接收Intent回传数据的时候覆写此方法对回传操作进行处理public void finish()        调用此方法会返回之前的Activity程序,并自动调用onActivityResult()方法public final Cursor managedQuery (Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)     处理返回的Cursor结果集==================================================================================================================6——Acvitity的栈式管理和四种启动模式:Acvitity的栈式管理:    Android针对Activity的管理使用的是栈,就是说某一个时刻只有一个Activity处在栈顶,    当这个Activity被销毁后,下面的Activity才有可能浮到栈顶,    或者有一个新的Activity被创建出来,则旧的Activity就被压栈沉下去了。(像水杯一样现金后出)    Activity是Android程序的表现层。程序的每一个显示屏幕就是一个Activity。    正在运行的Activity处在栈的最顶端(唯一可直接操作的Acvitity),它是运行状态的。配置信息声明启动方式:AndroidMainifast.xml          <activity            android:name=".StandardActivity"            android:launchMode="standard" />        <activity            android:name=".SingletopActivity"            android:launchMode="singleTop" />        <activity            android:name=".SingleTaskActivity"            android:launchMode="singleTask">        <activity android:name=".SingleInstanceActivity"            android:launchMode="singleInstance"></activity>    1.standardActivity       默认的启动模式,每次激活Activity时(startActivity),都创建新的Activity实例,       并放入任务栈(每次启动的Acvitity内存地址都不一样,自己可以向自己发出跳转命令,刷新自己在内存中的地址,之前的地址还会在,按返回键可查)    2.singleTop:如果任务栈栈顶就是该Activity,则不需要创建(此时自己是无法像自己进行跳转的,内存地址不会改变),        其余情况都要创建Activity实例        如果从栈顶返回到MainAcvitity再次进入时,内存地址就会发生改变    3.Singletask:如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需要把此       Activity放入栈顶,并把该Activity以上的Activity实例都清除,只会保留第一次跳转的内存地址    4.singleInstance:// 另起一个任务栈,(唯一一种新建栈地址的启动方式)只存放该activity的实例,启动时界面效果与上边不同,    必须返回MainAcvitity中重新启动(相当于刷新,每次跳转内存地址不同,只保留最后一次启动的地址),    启动后自己不能向自己发出跳转命名    通过 tv_task.setText(" 栈地址:"+getTaskId()+"" + "\n 内存地址:"+this.toString());可以验证
0 0
原创粉丝点击