概述
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程序的Intent
protected 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());可以验证
最后
以上就是纯情发卡为你收集整理的Android四大组件——Acvitity.txt的全部内容,希望文章能够帮你解决Android四大组件——Acvitity.txt所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复