Android四大组件Activity

本文详细介绍了Android中Activity的概念、生命周期、启动模式及配置方法,并讲解了如何实现Activity间的跳转及数据传递。
Android四大组件
•Activity
•BroadcastReceiver 广播接收者
•Service 服务
•ContentProvider 内容提供者

Activity的继承关系


public class Activity extends ContextThemeWrapper implements ....

public class ContextThemeWrapper extends ContextWrapper

public class ContextWrapper extends Context

public abstract class Context 

Activity的编写步骤:
1.写一个类继承 Activity
2.重写onCreate()方法 

3.在清单文件的下面声明activity
需要配置 布局文件 res/layout/... 
需要设置布局文件  setContentView(R.layout.activity_main);



Activity相关

Activity生命周期


entire lifetime -->完整生命周期
onCreate() --> onStart() --> onResume() --> onPause() --> onStop() --> onDestroy()



visible lifetime -->可视化生命周期
onStart()-->onResume()-->onPause()-->onStop() --> onRestart();



foreground lifetime -->前台生命周期
onResume() --> onPause()



onRestart()调用过程
onStop() --> onRestart() --> onStart() 


•onCreate()
当activity被创建时调用的方法



•onStart()
在onCreate()方法之后调用,当用户看到界面的时候调用



•onResume()
在onStart()方法之后调用,当activity后去焦点的时候调用



•onPause()
当activity失去焦点的时候调用 --> activity还能看见,但是对于activity里面的点击事件都无效了



•onStop()
当activity界面不可见的时候调用



•onDestroy()
当activity被销毁的时候调用



•onRestart()
当用户按home键切换到桌面,然后再进入activity的时候 会调用



配置activity没有标题栏方法

•配置application的theme
<item name="windowNoTitle">true</item>



•在自己写的activity的oncreate的方法里加入
requestWindowFeature(Window.FEATURE_NO_TITLE);
注意:这个方法要在setContentView之前调用,否则会报错



怎么创建一个activity界面
1.创建类继承Activity
2.在清单文件(AndroidManifest.xml)里面配置activity
3.实现类里的OnCreate的方法 -->这是Activity开启时调用的方法
4.在OnCreate方法里用 setContentView() -->指定activity显示的layout页面


怎么跳转一个Activity


直接开启

1.初始化显示意图,制定要跳转的Activity
Intent intent = new Intent(上下文,myActivity.class);
或者:
Intent intent = new Intent();
intent.setClass(上下文,myActivity.class);



2.如果有参数,用intent携带参数
intent.putExtra(key,value); -->里面存放的格式有:数据基本类型,序列化对象,字节数组...
如果对象 实现了 Parcelable接口 或者 Serializable接口,也可以通过intent来传递



3.调用startActivity 来跳转新页面
上下文.startActivity(intent);



4.如果当前页面需要关闭,在当前页面调用finish方法
上下文.finish();



5.跳转过去的页面要获取数据调用intent的get...方法
注意:这里不能new一个intent,否则拿不到数据,要获跳转过来的intent,用getIntent来获取
Intent intent = getIntent();
intent.getXXXExtra();




利用startForResult来开启
1.初始化意图
2.如果有参数设置参数

3.调用startActivityForResult() 跳转页面
startActivityForResult(intent,requestCode); 
-->requestCode:请求码,设置大于和等于0的数字



4.在跳转的activity里实现回跳的逻辑
Intent intent = new Intent();
intent.putXXX(); -->根据业务需求是否需要携带参数
setResult(resutlCode,intent);
finish(); -->最后需要关闭当前页面



5.当前activity实现onActivityResult()方法 --> 这是回跳的时候执行的方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
}
requestCode 是调用startActivityForResult时设置的requestCode
resultCode 是回跳的activity设置的code
data 是回跳时候携带的参数
可能当前页面需要跳转的页面过多,这里可以用requestCode和resultCode去过滤



显示意图&隐式意图
•显示意图:必须指定打开的activity的类名或者路径名


应用场景-->适合自己应用程序内部使用,效率高
    例子:
    Intent intent = new Intent();
    intent.setClassName(应用程序包名, 要跳转的activity路径名);
    startActivity(intent);

•隐示意图:需要指定action(动作)和category,如果action相同,而内容不同,可以配置data来区分


应用场景-->适合应用程序之间调用,根据action在去遍历查找,效率低

例子:
    1.要跳转的activity在清单文件里增在intent-filter
    <intent-filter >
            <action android:name="自己定义,习惯用包名后加功能名"/>
            <category android:name="android.intent.category.DEFAULT"/> //默认
    </intent-filter>



    2.谁要跳转到这个activity,谁的方法里面调用
    Intent intent = new Intent();
    intent.setAction("要跳转的activity在清单文件里配置的action");
    intent.addCategory("android.intent.category.DEFAULT");-->默认
    startActivity(intent);


隐示意图需要注意的地方

•在清单文件的 intent-filter 里面还可以配置 data标签,data标签可以配置多个不同种类型的
例如: 
<data android:scheme="自己定义"/> -->设置前缀,与电话播放器调用很像
<data android:mimeType="text/plain"/> -->定义类型,这里不能随意定义



•在java代码里
如果配置了scheme和mineType:
intent.setDataAndType(scheme,mimeType);


如果只配置scheme:
intent.setData();


如果只配置了mimeType:
intent.setType();



利用隐示意图激活系统应用
1.分析系统应用的清单文件里面定义的intent-filter
2.在java代码里根据intent-filter去设置

3.调用startActivity去激活
例如:
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
intent.addCategory("android.intent.category.BROWSABLE");
intent.setData(Uri.parse("http://www.itheima.com"));
startActivity(intent);



通过textView还有一种方式跳转网页
    tvName.setText(url);
    tvName.setAutoLinkMask(Linkify.ALL); -->用来匹配是否是个url连接
    tvName.setMovementMethod(LinkMovementMethod.getInstance()); 
    -->这个方法要是不设置,不会去跳转


Activity横竖屏切换
•在activity横竖屏切换的时候默认是销毁当前的activity,然后重新初始化activity

在清单文件里配置 
    android:screenOrientation="portrait" 
    portrait-->一直是竖屏
    landspace --> 一直是横屏
    固定activity的显示模式,这样就不会重走一次生命周期


或者配置
    android:configChanges="keyboardHidden|screenSize|orientation"
    这样的话就算横竖屏切换了,不会影响activity,也就不会重走一次生命周期


任务栈


task stack
•task --> 一个应用程序一般包括多个activity,每个activity都是用来和用户交互的任务

•stack --> 栈是一种特殊的数据结构(后进先出),队列也是一种特殊的数据结构(先进先出)
任务栈就是记录用户的操作的,记录activity打开的先后顺序,后开的activity先关闭,
当栈里的activity全部关闭,应用就退出了




一个应用程序一般对应一个任务栈,在某种情况下也能对应多个栈

Activity启动模式


standard: 标准启动模式
特点:默认启动模式



singleTop:单一顶部模式
特点:如果activity已经被开启,而且是在栈顶,就不会在创建当前这个activity的实例,
而是复用这个已经开启的activity,但是如果不是在栈顶,就会初始化一个新的实例,
在整个栈里允许有多个实例

•应用场景:短信界面


singleTask:单一任务栈
    特点:当前栈里只允许有一个当前activity的实例,
    如果要开启的activity在栈里存在,并且在底部,就会移除这个activity上面所有的activity

•应用场景:如果这个activity非常消耗cpu和内存,建议把这个activity的启动模式设置为singleTask,浏览器的browserActivity 设置的就是


singleinstance:单一实例
    特点:整个手机操作系统只有一个实例,并且是单独运行在自己的任务栈里

•应用场景:通话界面的activity
内容概要:本文介绍了基于贝叶斯优化的CNN-LSTM混合神经网络在时间序列预测中的应用,并提供了完整的Matlab代码实现。该模型结合了卷积神经网络(CNN)在特征提取方面的优势与长短期记忆网络(LSTM)在处理时序依赖问题上的强大能力,形成一种高效的混合预测架构。通过贝叶斯优化算法自动调参,提升了模型的预测精度与泛化能力,适用于风电、光伏、负荷、交通流等多种复杂非线性系统的预测任务。文中还展示了模型训练流程、参数优化机制及实际预测效果分析,突出其在科研与工程应用中的实用性。; 适合人群:具备一定机器学习基基于贝叶斯优化CNN-LSTM混合神经网络预测(Matlab代码实现)础和Matlab编程经验的高校研究生、科研人员及从事预测建模的工程技术人员,尤其适合关注深度学习与智能优化算法结合应用的研究者。; 使用场景及目标:①解决各类时间序列预测问题,如能源出力预测、电力负荷预测、环境数据预测等;②学习如何将CNN-LSTM模型与贝叶斯优化相结合,提升模型性能;③掌握Matlab环境下深度学习模型搭建与超参数自动优化的技术路线。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注贝叶斯优化模块与混合神经网络结构的设计逻辑,通过调整数据集和参数加深对模型工作机制的理解,同时可将其框架迁移至其他预测场景中验证效果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值