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
- Android四大组件——Acvitity.txt
- Android四大组件——ContentProvider的用法.txt
- Android四大组件——BroadCastReceiver用法实例.txt
- Android四大组件 — Activity
- Android四大组件—ContentProvider
- android四大组件—Activity
- Android四大组件—Activity
- Android四大组件—Service
- Android四大组件—BroadcastReceiver
- Android四大组件—ContentProvider
- Android四大组件—广播
- Android四大组件—Service
- Android四大组件—ContentProvider
- Android开发——Android四大组件
- Android 开发 —— Android四大组件
- Android四大组件——Service详解
- Android四大基本组件——Activity
- Android四大基本组件——BroadcastReceive
- jQuery length和size()区别
- android 真机调试 DDMS 看不到进程解决方法
- Hibernate面试题
- Android随笔
- boost::assert学习笔记
- Android四大组件——Acvitity.txt
- 虚幻UE4中如何采集360度全景图片和VR视频
- JVM调优总结(三)-基本垃圾回收算法
- C++线程池原理
- Struts2的工作流程
- SAP 补0
- JVM调优总结(二)-一些概念
- SpringMvc+mybatis 配置
- GCD API讲解<二>