Android学习还有一些小技巧MrRisingSun

八、lambda表达式这个表达式是JAVA8的新特性,我们直接在后面完整的Demo中使用,用到的时候再具体的说明

获取全局Context

这里我们考虑这样一个问题,我们再一个类中进行了一些异步操作,完了之后我们需要一个Toast提示,这时候我们需要Context,那我们有那么获取Context。

首先就有这样一种,我们直接在初始化这个类的时候传递一个Context,的确这样是能解决问题的,但这不是最好的解决问题的办法,最好的办法是我们获取一个全局的Context,下面我们总结如何获取一个全局的Context。

packagecom.example.skotc.servicedemo;importandroid.app.Application;importandroid.content.Context;/***Createdbyskotcon2018/8/20.*/publicclassMyApplicationextendsApplication{privatestaticContextcontext;@OverridepublicvoidonCreate(){super.onCreate();context=getApplicationContext();}publicstaticContextgetContext(){returncontext;}}

上面的代码我们就创建了一个MyApplication继承自Application,然后再以后的使用中我们就可以直接调用这个方法得到全局的Context,MyApplication.getContext()方法获取得到Context。

使用Intent传递对象

Intent相信我们都比较熟悉了,我们可以使它来启动活动,发送广播,启动广播等,在进行上述操作的时候,我们还可以在Intent中添加一些附加数据,已达到传值的效果,比如我们见过的调用putExtra(键,值)方法来添加要传递的数据,之后通过调用getIntent().getStringExtra(键)来获取我们传递的值,通过这种方法我们能传递的对象类型是有限的,也就常见的类型,那我们有没有想过,要是需要专递的是一个自定义的对象的时候呢,我们该怎样做?

下面我们就讨论一下这个问题:

1、Serializable方式(序列化)

Serializable是序列化的意思,表示将一个对象转换成可存储或者可传输的状态,序列化后的对象可以在网络上进行传输,也可以存储在本地,至于序列化的方法也是很简单,只需要让一个类去实现Serializable接口就可以。

比如我们实现了一个person类,让它实现Serializable接口:

classpersonimplementsSerializable{privateStringname;privateintage;publicvoidsetName(Stringname){this.name=name;}publicvoidsetAge(intage){this.age=age;}publicStringgetName(){returnname;}publicintgetAge(){returnage;}}

接下来我们看看这个自定义对象的传递以及获取:

personzhangxu=newperson();zhangxu.setAge(18);zhangxu.setName("tiancia");//传递Intentintent=newIntent(ServiceMainActivity.this,SecondActivity.class);intent.putExtra("person",zhangxu);startActivity(intent);//获取personzhangxu2=(person)getIntent().getSerializableExtra("person");

一句话总结:我们之所以能将我们自定义的类在Intent中传递就是因为我们自定义为类实现了Serializable接口。

Parcelable

Parcelable方式的实现原理是将一个完整的对象进行分解,而分解后的每一部分都将是Intent所支持的数据类型,这样也就实现传递对象的功能。

接下来我们修改我们的额person类,修改这个类的注意事项我们在代码中都有加注释

/***实现Parcelable接口*就要重写里面的两个方法*describeContents*writeToParcel***/classpersonimplementsParcelable{privateStringname;privateintage;publicvoidsetName(Stringname){this.name=name;}publicvoidsetAge(intage){this.age=age;}publicStringgetName(){returnname;}publicintgetAge(){returnage;}@OverridepublicintdescribeContents(){return0;}//把数据写入到parcel中@OverridepublicvoidwriteToParcel(Parcelparcel,inti){parcel.writeString(name);parcel.writeInt(age);}//我们还必须在person类中创建一个CREATOR常量,这里创建了一个Parcelable.Creator接口的实现//并且将泛型类型指定为person,接着重写里面的两个方法//createFromParcel这个方法中读取刚才存入的字段//newArraypublicstaticfinalParcelable.CreatorCREATOR=newParcelable.Creator(){@OverridepublicpersoncreateFromParcel(Parcelparcel){personperson=newperson();//读取数据person.name=parcel.readString();person.age=parcel.readInt();returnperson;}@Overridepublicperson[]newArray(inti){returnnewperson[i];}};}

说说它的传递方式,传入时候和我们之前写的Serializable是一样的,就不在重复,只是在读取的时候,有一点需要我们注意一下,就是方法名改变了:

personzhangxu3=(person)getIntent().getParcelableExtra("person");

它们俩的区别:

serializable的方式比较简单,但由于会把整个对象进行序列化,因此效率会比Parcelable低一些,所以在通常情况下我们还是建议使用Parcelable方式!

日志控制

在iOS中我们经常有用到这个日志控制的问题,在安卓中也是,就是在debug阶段我们需要大量的日志,但是在release状态我们是不需要的,日志不仅仅会增加程序运行的成本,还会泄漏一些重要的信息,所以在编译release状态我们是需要控制日志打印的,在安卓中我们可以写这样的一个类来进行处理。

classLogUntil{publicstaticfinalintVERBOSE=1;publicstaticfinalintDEBUG=2;publicstaticfinalintINFO=3;publicstaticfinalintWARN=4;publicstaticfinalintERROR=5;publicstaticfinalintNOTHING=6;publicstaticfinalintleven=VERBOSE;publicstaticvoidv(Stringtag,Stringmsg){if(leven<=VERBOSE){Log.d(tag,msg);}}publicstaticvoidd(Stringtag,Stringmsg){if(leven<=DEBUG){Log.d(tag,msg);}}publicstaticvoidi(Stringtag,Stringmsg){if(leven<=INFO){Log.d(tag,msg);}}publicstaticvoidw(Stringtag,Stringmsg){if(leven<=WARN){Log.d(tag,msg);}}publicstaticvoide(Stringtag,Stringmsg){if(leven<=ERROR){Log.d(tag,msg);}}}

上面的这段代码就是我们常用的日志控制,在我们要发布的时候,我们设置leven的值为NOTHING的时候我们的日志也就不见了!和我们iOS的理解方式是一样的,我们iOS中会用到DEBUG这个变量,具体的我也就不再多说了,有兴趣的可以自己找找这方面的问题,我们直说安卓的。

创建定时任务

下面我们用代码写一个Alarm的实际例子:

聊聊Doze模式

接下来看看在Doze模式下那些功能会受到影响:

1、网络访问被限制

2、系统忽略唤醒CPU或者屏幕操作

3、系统不再执行WIFI扫描

4、系统不再执行同步服务

5、Alarm任务将会在下次退出Doze模式的时候执行

多窗口

Android在7.0之后导入了多窗口模式,在这里我们可以大概的学习一下多窗口模式。

在这里我们说一下,在多窗口模式下并不会改变活动原有的生命周期,只是会将用户最近交互过的那个活动设置为运行状态,而将多窗口模式下另外一个可见的活动设置为暂停状态,如果这时候用户又和暂停的活动进行交互,那么该活动就会进入运行状态,之前处于运行状态的活动变成暂停状态。

前面我们说到在多窗口模式下,活动的生命周期是不会发生改变的,那么有一些问题我们就可以随之考虑一下:

比如说,在多窗口模式下,用户任然处于可以看到暂停状态的应用,那么像视频播放之类的应用在此时就应该是继续播放视频才对,因此,我们最好不要在活动的onPause方法中处理视频播放器的暂停逻辑,而是应该在onStop()方法中处理,并且在onStart方法中回复视频的播放。

另外,针对进入多窗口模式时候,活动会被重新创建,如果你想改变这一默认行为,可以在Androidmainfest.xml中进行如下配置:

加入这个配置之后,不管是进入多窗口模式,还是横竖屏切换,活动都不会被重新创建,而是会将屏幕发生变化的事件通知到Activity的onConfigurationChanged()方法中,所以你要是想在屏幕发生改变的时候进行相应的逻辑处理,那么在活动中重写onConfigurationChanged()方法即可。

禁止多窗口模式

Androidmainfest.xml中这样配置:

android:resizeableActivity="false"true表示支持,false表示禁止

这样就OK了吗?其实还有一个问题需要我们考虑一下这个问题,这个属性是在我们指定targetSdkVersion大于等于24的时候才有效的,那小于24呢?没有这个属性我们怎么处理呢?我们再这里说一种解决方案:

Android规定,如果项目指定的targetSdkVersion低于24,并且活动是不允许横竖屏切换的,那么该应用也将不支持多窗口模式。

默认情况下,我们的应用是支持横竖屏切换的,如果想想要让应用不允许横竖屏切换,那么就需要在Androidmainfest.xml的标签中加如下配置:

THE END
1.智能学习平台应用的探索与实践在当前瞬息万变的知识经济时代,智能学习平台应运而生,成为推动教育改革的重要力量。这些平台通过分析学生的数据与行为,为其量身定制学习方案,使每个学生都能在自己适合的节奏和风格下进行学习。 从本质上讲,智能学习平台兼具课程管理、内容推送与学业分析等多重功能。它们为教师和学生提供了丰富的资源和工具,帮助学生在https://blog.csdn.net/tiangang2024/article/details/144371950
2.在线教育平台软件:重塑学习方式的未来未来,在线教育平台软件将更加注重融合线上线下教育模式,实现线上线下教育的无缝衔接。这种融合不仅将提高教育的质量和效率,还将为学习者提供更加灵活多样的学习选择。 拓展国际市场和跨文化交流 随着全球化的不断深入和跨文化交流的日益频繁,在线教育平台软件将积极拓展国际市场并加强跨文化交流。通过提供多语言支持、国际https://www.pbids.com/aboutUs/pbidsNews/1861300386415087616
3.人工智能为跨学科学习带来机遇《义务教育课程方案(2022年版)》明确提出,“强化课程综合性和实践性,推动育人方式变革,着力发展学生核心素养”“强化学科内知识整合,统筹设计综合课程和跨学科主题学习”,强调在真实情境中培养学生运用跨学科知识解决问题的能力。跨学科学习是当前基础教育改革和课程建设的重点,然而当前仍存在学科之间的简单拼接、资源整合http://www.jyb.cn/rmtzgjsb/202412/t20241210_2111281739.html
4.网络学习空间精准助力教学4.微辅导好助手,多重辅导 老师在网络学习空间的微辅导栏目可以发布微课、作业辅导、板书分享、文件分享、试卷讲评、好题分享等资源,学生可以根据自己的实际情况进行自主选择学习,也可以在下方评论区提问、讨论 ,这样能更有针对性、更加有效地针对学生学情进行辅导,照顾到不同层次的学生,一次没学会,还可以多次观看学习https://jyj.changzhi.gov.cn/jyzc/202310/t20231026_2812983.html
5.数字化学习资源及其应用专题培训数字化学习资源与以往传统的学习资源相比较,其最大的优势在于其互动性,无论是通过网络媒介进行的学习方式,还是通过光盘等进行的学习方式,其双向交流的方式得到越来越多学习者的喜爱,一方面学习者可以通过网络上的交流工具,实现与老师或学生之间的交互;另一方面学习者还可以从学习软件的数据库中寻求问题的答案,同时也可http://www.zpxx.wj.czedu.cn/html/article731078.html
6.深度学习高手笔记卷1:基础算法本书通过扎实、详细的内容和清晰的结构,从算法理论、算法源码、实验结果等方面对深度学习算法进行分析和介绍。本书共三篇,第一篇主要介绍深度学习在计算机视觉方向的一些卷积神经网络,从基础骨干网络、轻量级 CNN、模型架构搜索 3 个方向展开,介绍计算机视觉方向的里程https://www.epubit.com/bookDetails?id=UB7d8623610d375
7.工作总结范文(20篇)车站20xx年春运售票以便民利民,方便旅客购票为目标,发挥互联网售票、电话订票优势,并根据互联网、电话订票等新型售票方式的`特点,科学增开取票窗,增设临时取票处,调整窗口功能,设立多个取票专窗,车站窗口功能主要为取票和办理退票和改签。为应对旅客取票高峰,车站对第二售票厅进行改造,并在春运前增设了20多台自售和https://www.ruiwen.com/gongzuozongjie/6516627.html
8.某网络学院学习的”偷懒“思路分析吾爱破解2,窗口多开。稳妥一点的还是老老实实的挂课,多窗口学习。搜索“停止计时”,发现多窗口检查居然是通过https://www.52pojie.cn/thread-1746820-1-1.html
9.神经网络预测模型中的滑动窗口方法原理神经网络模型预测控制3、宏观预测与微观预测4、长、中、短期预测第三:预测的方法1、专家预测法2、指数平滑法3、Box-Jenkins预测方法4、回归分析法5、灰色预测方法6、组合预测方法7、人工神经网络预测法8、其他预测方法。 神经网络优缺点, 优点:(1)具有自学习功能。例如实现图像识别时,只在先把许多不同的图像样板和对应的应识别的结果https://blog.51cto.com/u_16213674/10411770
10.网络学习心得体会(精选22篇)在平日里,心中难免会有一些新的想法,应该马上记录下来,写一篇心得体会,这么做能够提升我们的书面表达能力。应该怎么写才合适呢?下面是小编精心整理的网络学习心得体会,供大家参考借鉴,希望可以帮助到有需要的朋友。 网络学习心得体会 1 通过1个多月的网络培训,通过这个培训平台,使我认识到现代网络时代的广大用途,充分https://www.unjs.com/fanwenwang/xdth/20221212104205_6095864.html
11.入门分享12篇深度学习目标检测必读论文腾讯云开发者社区正如我们上面介绍的,在2015年初,Ross Girshick 提出了一个改进版本的 R-CNN,称为 Fast R-CNN,对建议的区域使用共享的特征提取器。仅仅几个月后,Ross和他的团队又带着另一个改进回来了。这个新的网络Faster R-CNN 不仅比以前的版本更快,而且标志着目标检测深度学习方法的一个里程碑。 https://cloud.tencent.com/developer/article/1685055
12.中国烟草网络学院能挂机学习软件2017最新版下载挂机学习软件是用于用于各种网络学院学习视频使用的一种挂机软件,能够实现自动点击学习过程中的提示窗口,从而继续学习。大家都知道,在网络学院学习完一定时间之后需回答问题之后才能继续学习且课繁多。若使用挂机软件在网络培训学院网远程学习则软件会自动更新学习时间,希望能帮到大家。 https://www.fxxz.com/azsoft/292742.html
13.医德医风考核表个人总结(精选15篇)能够认真贯彻党的基本路线方针政策,透过早会、报纸、网络积极学习政治理论,遵纪守法,爱岗敬业,积极拥护医院以及手术室的各项方针政策和规章制度,一切以病人为中心,严格以一名优秀护士的标准要求自我,坚持以医疗服务质量为核心,以病人的满意度为标准,牢固树立团队合作精神。 https://www.fwsir.com/Article/html/Article_20230211185700_2372241.html
14.我所35篇论文被2022国际计算机视觉与模式识别大会(CVPR)接收为实现这一目的,我们首先设计了一个三分支深度网络,通过对同一视频帧图像进行数据增广,来构建声音特征与不同视角下的视觉特征之间的语义相关性;然后利用SimSiam式的自监督表示学习方法训练模型;最后,使用声音特征与视觉特征之间的相似性图确定声源位置。值得强调的是,提出的预测编码(Predictive Coding)模块有效实现了视觉模https://www.1633.com/article_univ/217359.html
15.生成式AI术语指南:带有配图说明,没有数学公式参数是语言模型中所设置变量的数量,模型在训练过程中从数据中学习这些变量。LLM 的语言能力归功于训练的大量参数。 2.6 上下文窗口(Context Window) LLM 的结构特性决定了它可以处理一定数量的词元(提示词和补全本文)。 这个最大 tokens 数量被称为模型的上下文窗口。 https://blog.itpub.net/70018536/viewspace-3009086/
16.2023年幼儿园家长学校工作总结(精选13篇)(1)举办多形式有针对性的家教讲座如:幼小衔接讲座及每周的语音亲职教育讲座。 (2)做好家访工作。对每位新生进行家访,学期中进行不定期的`家访,学期末进行全面家访。 (3)举行家长开放日活动,把"家长开放日"作为家园共育好时机,让家长了解孩子在幼儿园的生活学习,调动家长把所观、所思、所想反馈出来,互相交流,共https://www.yjbys.com/zongjie/gerenzongjie/1038335.html
17.网络学习空间的分类:框架与启示智慧教育时代,学习场所已经从物理学习空间拓展到网络学习空间。http://www.sqjy.ha.cn/lunwen/qita/856.html
18.AI无损检测方向速读:基于深度学习的表面缺陷检测方法综述2.3 度量学习(使用深度学习直接学习输入的相似性度量) 缺陷分类任务中,往往采用孪生网络(Siamese networks)进行度量学习。不同于表征学习,输入单幅图像转化为分类任务,孪生网络的输入通常为两幅或多幅成对图像,通过网络学习出输入图片的相似度,判断其是否属于同一类。 https://developer.aliyun.com/article/1209184
19.一文极速理解深度学习再者,如果遇到大数据,数据量会有几百万、几千万之多,这种情况下以全部数据为对象计算损失函数是不现实的。因此,我们从全部数据中选出一部分,作为全部数据的“近似”。神经网络的学习也是从训练数据中选出一批数据(称为mini-batch,小批量),然后对每个mini-batch进行学习。比如,从60000个训练数据中随机选择100笔,再https://www.eefocus.com/article/1678689.html
20.脑电信号解码和可视化的深度卷积神经网络深层转换网络可以首先从原始输入中提取局部的低级特征,然后在更深的层中提取越来越多的全局和高级特征。例如,深度卷积网络可以学习从原始图像中检测日益复杂的视觉特征(例如,边缘、简单形状、完整对象)。在过去的几年里,深度卷积网络在许多应用领域取得了高度成功,例如在计算机视觉和语音识别领域,通常优于以前最先进的https://www.360doc.cn/mip/981355376.html
21.盘点《人民的名义》中15个令人深思的社会问题(人民的名义)剧评在剧中,拆迁队与占厂工人刚发生冲突,现场视频就第一时间被传到了网上,做“删帖”生意的郑胜利熟谙互联网的操作规律,用“标题党”式的语言将信息通过微博传播,网络舆情鼎沸,很快引起了沙瑞金、高育良等高层领导的注意,甚至连远在北京的侯亮平也通过手机看到了现场情况。网络舆情让政府一时很被动,剧中网监部门也报告称https://movie.douban.com/review/8506942/