恐怖邮轮(有剧透!没看过的建议先观看电影!也可以直接目录跳转相关知识点)

  • 1.到达船坞,众人出海(页面跳转,数据传递)
    • 1.1驱车前往:Intent
    • 1.2杰西上车:putExtra
    • 1.3杰西下车:在跳转后的界面取数据
  • 2.遭遇风暴,邮轮获救(数据回传(请求与获取))
    • 2.1数据回传(请求)tips:正确的逻辑顺序为2.1->3.2->2.2
    • 2.2数据回传(获取)
  • 3.众人遇难,杰西发现黑衣人(保存临时数据与数据回传(发送数据))
    • 3.1始终存在的黑衣人:如何保存活动内的临时数据防止切换页面在切回导致的数据消失?
    • 3.2轮回的呼救信号:数据回传(发送数据)
    • 3.3总结一下数据回传
  • 4.无限的轮回(知晓当前启动的活动)
    • 4.1这究竟是哪一次轮回!:如何知晓当前在哪一个活动
  • 5.无法终结的轮回(如何终结掉所有活动直接退出)
    • 5.1 所以到底该怎么终结这个轮回?!:一键结束所有活动

1.到达船坞,众人出海(页面跳转,数据传递)

一个风和日丽的下午,洁西被朋友邀请出海航行,但冥冥中她总觉得,周围的一切都充满奇怪的熟悉感。

她收拾好东西,透过窗户,孩子正在涂涂画画。
匆忙收拾好洒在地上的墨水
有人按她家的门铃,她却不知道是谁,出门问了Jack老大爷,他说没看到。
四处透露着莫名的诡异。

故事开始了

工程只要包含Activity,那么在启动这个应用的时候都需要指定一个启动页作为初始页。也就是我们打开app第一眼看到的页面。
我们需要在AndroidMainfest.xml中来指定那个活动作为启动页。具体的方式如下:

        <activity android:name=".Login"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>

杰西驱车来到了船坞,和葛雷一行人会面。

1.1驱车前往:Intent

Intent主要用于在组件中进行跳转或者传递数据,在这里我们用到了跳转活动和传递数据

活动由 由家到达船坞 intent这个小车载着数据 杰西来到了船坞
这个小车我们要如何实现呢?

Intent intent=new Intent(HomeActivity.this,DockActivity.class);

这就是小车了,这个小车的作用就是从家到船坞
那么光车去了也不行,杰西也得跟着去呀。

1.2杰西上车:putExtra

String name="杰西";
intent.putExtra("data",name);

可以通过intent.putExtra() 来为intent携带数据。当然还有其他的方式来实现。以后慢慢会接触到。
然后杰西上车后,
车子启动:startActivity(intent)

satrtActivity(intent)

于是绑定控件后完整的代码如下:

        Button red_car=findViewById(R.id.button1);red_car.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent=new Intent(Login.this,MainActivity.class);String name="杰西";intent.putExtra("data",name);startActivity(intent);}});


杰西到达船坞,此时在船坞中,葛雷(杰西的朋友),维克多(葛雷的室友),莎莉(葛雷的朋友),东尼,海瑟(莎莉的朋友)已经到达了船厂。

public class DockActivity extends AppCompatActivity {String person="目前在船厂有葛雷,维克多,萨利,东尼,海瑟,";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_dock_activity);final TextView text=findViewById(R.id.textView3);text.setText(person);}
}

1.3杰西下车:在跳转后的界面取数据

如果我们要在跳转后的界面进行取数据的操作可以使用以下代码:
Intent intent=getIntent();
String jess=intent.getStringExtra(“data”);
其中data就是我们在跳转时填写的变量。是唯一的

     Button out_car=findViewById(R.id.button);out_car.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent=getIntent();String jess=intent.getStringExtra("data");person=person+jess;text.setText(person);}});

在这里我们将下车绑定在控件上,用点击监听事件触发下车这个动作。
杰西下车
此时船坞的所有人全部到齐了

葛雷看到杰西来到船坞,前来打招呼(杰西是个单亲妈妈,这个葛雷其实对杰西有意思=。=)

杰西的状态不是很好,葛雷非常体贴,说:我们可以换个日子,但是杰西却坚持出海了。
于是,他们一同又一次踏上了死亡之旅。
等等。。
为什么要用 “又”?

2.遭遇风暴,邮轮获救(数据回传(请求与获取))

船只在海面上平稳的航行,杰西躺在船舱内的床上,她梦到了一个场景,她被冲到岸边,撕碎的衣服被海浪肆意翻卷。
突然她从梦中醒来。
暴风雨之前总是平静的,一刹那,风停。船只停留在海面上,仿佛静止。

后大风骤起,海面挂起狂风。暴风雨来了

2.1数据回传(请求)tips:正确的逻辑顺序为2.1->3.2->2.2

在狂风骤雨之中,葛雷的船发出了求救信号,但是却收到了一个奇怪的回复(注意,数据回传)
“我们需要求救,有船只能够救援吗?“

通过startActivityForResult(Intent intent,requestCode int);来传递一个信号,根据requestCode来匹配获得下个活动处理后得到的数据。

        Intent intent=new Intent(DockActivity.this,CruiseActivity.class);String data="我们需要求救,你们的船只位置哪里?";intent.putExtra("help",data);startActivityForResult(intent,1);

在这里发出的请求就是 requestCode=1;当有船只收到这个quest的时候可以处理这个请求。

之后葛雷却收到了一个奇怪的回复:“help me!!!(随后信号混乱,中断)”
那么我们在这里是如何接受这个回复并处理回复带的数据的呢??

我们在回传活动的部分需要重写onActivityResult方法来处理收到的数据。在这里使用到了三个参数,第一个就是requstCode, 就是我们发出的1,用来判断是不是回复我们的,
第二个参数是resultCode,用来判断是不是成功回复了,也就是能不能接通。第三个data,用来判断内容。

    @Overrideprotected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {switch (requestCode){case 1:if(resultCode==RESULT_OK){String respond=data.getStringExtra("request");}}}

2.2数据回传(获取)

在这里有船只收到了葛雷的信息,并且给与了回复,回复的内容是这样的“help me!!”

随后,船只禁受不住飓风,倾覆了,众人落水,海瑟由于想撩男主被海浪卷走了。领盒饭
剩下的人获救,但是船只损坏了。活动结束
后众人遇到了噩梦的开端 AEOLUS邮轮

众人发现这个邮轮上有人在观察他们,但是一闪而逝。
随后登船获救

        Button save=findViewById(R.id.button6);save.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent=new Intent(DockActivity.this,CruiseActivity.class);intent.putExtra("data1","葛雷,杰西,维克多,萨利,东尼");startActivity(intent);finish();}});

3.众人遇难,杰西发现黑衣人(保存临时数据与数据回传(发送数据))

登上船只后,杰西对这个地方的熟悉感越发的强烈。但此时她不知道的是,一个黑衣人已经虎视眈眈,想要杀掉他们所有人。

3.1始终存在的黑衣人:如何保存活动内的临时数据防止切换页面在切回导致的数据消失?

我们需要在活动内重写savedInstanceState方法来保存我们想要保存的临时数据。在方法内部使用outState中的putString方法来保存字符串类型的数据,其他数据同理。

    @Overrideprotected void onSaveInstanceState(@NonNull Bundle outState) {super.onSaveInstanceState(outState);String drakkiller="黑衣人";outState.putString("darkkiller",drakkiller);}

如果我们要调用保存的临时数据可以在onCreate方法中书写如下代码:

if(savedInstanceState!=null)
{String darkkiller1=savedInstanceState.getString("darkkiller");## 利用数据 ##
}

杰西不好的预感越发强烈
然而事实也是如此,再此之后,朋友们接连被一个蒙面的黑衣人杀害,其中有人发现这个想要杀掉他们的人竟然是杰西,于是当朋友们来找说法的时候,杰西蒙了,并极力否认并不是她。
场面血腥,不过分描述。请自行观看=。=
杰西在船舱找到了通讯室,于是向外发出了求救信号。(注意,数据回传)
之后当杰西与黑衣人碰见的时候,体内的战士之魂爆发了
最后反杀了黑衣人,但是当黑衣人坠入海中前,她说出了一句让人难以理解的话:
“你必须要杀掉他们,这是回家的唯一方法,杀了他们,杀了他们,杀了他们!”
杰西以为这是结束,但她不知道的是,这才是刚刚开始。
当她关掉音乐盒却听到了呼救声音,这时候她惊诧的发现…
这是她们落海时呼救的场景!

一切又来了一遍,这是这次,她成了船上的人。
此时她明白了一件事,当时在船舱内收到的奇怪求救信号,就是她在船舱内呼救发出的!

3.2轮回的呼救信号:数据回传(发送数据)

这时候一切都清楚了,当初在船内的信号就是她发出的,而这个回复,回传到小船上的信号,是这样实现的。

                Intent intent=new Intent();intent.putExtra("requset","help me!!");setResult(RESULT_OK,intent);finish();

跳转后的界面如果向向前一个界面回传数据,需要以下两个参数,resultCode和data,也就是处理结果以及附带的数据。这里用setResult来将结果与数据传递回上一个活动。这里的Intent()不参与页面跳转,只进行数据的传递。

3.3总结一下数据回传

数据回传的过程其实就是 需要回传数据的活动发送一个requsetCode,然后收到这个requsetCode的活动根据收到的信息处理数据并给于反馈,反馈包括处理结果resultCode和返回的处理数据。然后我们需要在需要回传数据的活动内重写onActivityResult方法来处理收到的数据。

4.无限的轮回(知晓当前启动的活动)

此时的她心灵收到了极大地冲击,满脑子都是一句话“只有杀掉他们你才能回家”
她的儿子还在家等她,为了她的儿子,她蒙上了面,拿起了武器。开始了新的一次轮回。
她没有反应过来的是,此时她已然成为了那个黑衣人。于是她展开了行动
当她再一次杀掉除了杰西的所有人后,她悲哀的发现,自己成为了那个被杀掉的人。
当杰西再次醒来,她发现她又一次回到了船上,然而这次,她发现地上都是重复的一张张纸条,写满了杀掉他们,在那个她不经意掉落吊坠的下水井,竟然满都是吊坠

这就告诉我们一件事,当活动比较多的时候,需要知道启动了那个活动并且能够对活动进行管理。

4.1这究竟是哪一次轮回!:如何知晓当前在哪一个活动

当活动比较多的时候,我们可以需要来很好的分辨现在处于哪个活动当中。为此我们需要创建一个BasicActivity类,然后去继承AppCompatActivity类,在BasicActivity内实现提示我们所处类的方法。
重写onCreat方法

首先创建一个BasicActivity,然后继承AppCompatActivity类

public class BasicActivity extends AppCompatActivity

然后我们重写onCreate方法来显示我们所在的活动位置。

        Log.d("BasicActivity",getClass().getSimpleName());

通过这个代码可以在Logcat内看到我们当前所处的活动。
每当我们创建一个活动的时候,都去继承BasicActivity 当我们运行至此活动时就会显示。

2020-03-21 23:02:27.476 20117-20117/com.example.firstacitivity D/BasicActivity: DockActivity
2020-03-21 23:02:48.223 20117-20117/com.example.firstacitivity D/BasicActivity: CruiseActivity

5.无法终结的轮回(如何终结掉所有活动直接退出)

她终于明白了一件事,这是一个轮回,只有她逃脱邮轮才有希望摆脱这玩笑一般的厄运。于是她不断地重复之前的过程,在船头堆满了她,或者说以前的她的尸体。
天晓得她已经来过这里多少次了,只有能够逃脱这里她才能够回去见到自己的儿子!
作为黑衣人的她落到水里,也没有死。她在沙滩上醒来,梦中的情节再次出现。

她被冲到岸边,撕碎的衣服被海浪肆意翻卷。
她知道自己成功了,她回到了陆地上!
她为了自己的儿子拼命地回到家看到儿子依旧在画画,熟悉的画面涌上心头,坚强的杰西哭了TAT

但是在之后却亲眼看到了自己因为自闭症儿子把她买的船扔到水池里而被狠狠的责骂,原来这一切都是曾经发生过得,她在之前是个不折不扣的暴力狂

她看到了自己因为孩子打翻墨水而大打出手

她努力了这么久但她不是一个好妈妈,但经历了这么多让他对儿子充满了愧疚和爱,于是她杀了自己。

然后她抱着孩子说:

但是其实殊不知,

才是刚刚开始。

5.1 所以到底该怎么终结这个轮回?!:一键结束所有活动

如果想要结局,那么用代码真的很简单。

我们只需要创建一个ActivityControl类然后书写以下代码

public class ActivityControl {public static List<Activity>activities=new ArrayList<>();public static void addActivity(Activity activity){activities.add(activity);}public static void removeActivity(Activity activity){activities.remove(activity);}public static void removeAllActivity(){for (Activity activity:activities){if(!activity.isFinishing()){activity.finish();}}activities.clear();}
}

在这里我们定义了一个列表来储存所有的活动,然后定义了增加活动,移除活动以及结束所有活动的方法。
然后我们在以上的基础上加入到BasicActivity类中,重写onDestroy方法和onCreat方法。

public class BasicActivity extends AppCompatActivity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);Log.d("BasicActivity",getClass().getSimpleName());ActivityControl.addActivity(this);}@Overrideprotected void onDestroy() {super.onDestroy();ActivityControl.removeActivity(this);}
}

接下来当我们需要在某个界面结束掉所有活动的时候,只需要调用一下以下代码就可以实现一键关掉所有活动了!!!

   ActivityControl.removeAllActivity();

这个电影真的很好看!希望看过的朋友们有时间能够在去重温一下!里面的很多细节我记不住了有的地方可能有偏差,希望大家不要怪罪。没有看过的朋友们我不希望你们看到这句话!因为这就代表你们看到了剧透!!!!如果想要小demo了解这几个实现的具体细节可以私信我,最后希望大家能边看边学,掌握关于活动的一些使用技巧。下期再见!

Android活动+《恐怖游轮》带你了解跳转传递数据如何随时结束程序小技巧相关推荐

  1. 老式Android中碎片Fragment之间的跳转和数据传递

    随着jetpack组件的使用,fragment之间的跳转和传值已经有相应的demo了.但是有时候难免不用Navigation,或者一些老项目的维护.这里,简单记录下老式fragment怎么跳转和传值. ...

  2. pAdPt_-9 活动的生命周期[LogCat java关键字] 传递数据[Intent 静态变量 全局变量 剪切板]

    2015.11.13-11.17 平台. Windows 10 Android Studio 1.3.2 看"Android.老罗"的笔记以为Android开发入门的好瓜笔记,笔记 ...

  3. android 打开移动开关,教你一个让安卓手机运行更流畅的小技巧:打开这个开关即可...

    原标题:教你一个让安卓手机运行更流畅的小技巧:打开这个开关即可 安卓用户对于"系统优化"这个词一定不会陌生,因为Android系统越用越卡的毛病难以解决,必须进行优化才能保持流畅. ...

  4. idea shell 中的函数 跳转_6 个珍藏已久 IDEA 小技巧,这一波全部分享给你!

    每周趣图 产品经理设计体验/用户实际体验 本周就不写技术分析文章了,分享几个珍藏已久的 IDEA 的「骚技巧」,助你快速完成代码. 还等什么?赶紧上车吧...... 前进/后退 我们使用浏览器的过程, ...

  5. win10自带的便笺便签有哪些方便快捷的操作小技巧?

    Windows10系统是主流办公系统之一,不少职场人士电脑采用的都是这一款系统.Win10系统不但流畅而且安全性好,还有许多小工具可以帮助大家办公.比如,win10自带的便笺.在Win10便笺里,还有 ...

  6. Android滑屏速度,让安卓手机流畅度瞬间飙升60%,这个小技巧厉害了

    原标题:让安卓手机流畅度瞬间飙升60%,这个小技巧厉害了 6月份各大国产手机品牌相继推出自己的旗舰机,华为小米等厂商都推出自己的旗舰机,就连最近几年一直主打中端手机的ov厂商也推出了顶级旗舰机,vov ...

  7. uniapp不同页面跳转传递数据

    上周工作中遇到的坑,打算这周复盘一下,记录下来,防止忘记. 1.App页面的原型大致如下 其实也还算简单,就几个表单项,重点是底下的几个输入框的数据,不是在本页面直接输入,而是由另一个表单页传过来的数 ...

  8. 小程序服务器搭建前后端交互,微信小程序:request前后端交互 路由跳转 存储数据到本地和获取 小程序登入 授权...

    一 request前后端交互 基本样式 wx.request({ url:'test.php', //仅为示例,并非真实的接口地址 data: { x:'', y:''}, header: {'con ...

  9. android数据回传多个页面_Android Day06四大组件之Activity多页面跳转和数据传递

    ToolBar中menu无法同时显示图标和文字问题的解决方法 Toolbar添加返回按钮 ToolBar与ActionBar 1.什么是Activity 官方文档是这么说的:Anwhich users ...

最新文章

  1. Android APK反编译得到Java源代码或资源文件
  2. win8 Windows 8 设置 默认浏览器
  3. #中调用委托的简单方法
  4. 与 OpenCV 1 同时使用
  5. 目标检测_目标检测: AnchorFree 时代
  6. Contact Manager Web API 示例[1]CRUD 操作
  7. C#仿QQ皮肤—更新DataGridView的鼠标跟随效果
  8. JavaScript数字精度丢失问题总结
  9. java并发程序死锁检测_Java并发:隐藏的线程死锁
  10. 如何安装Scrapy
  11. 一个月空余时间微信诗词小程序前后端开发上线实践指南
  12. 2012年8月21日
  13. 计算机为什么采用二进制
  14. 推荐一些实用的谷歌浏览器翻译插件
  15. 一个不错的shell 脚本教程
  16. python中文朗读_用python实现的文字朗读
  17. matlab axisxy行列关系,在matlab中axis是什么意思
  18. win10系统安装到服务器失败怎么解决,windows10安装失败怎么办?解决win10安装失败的方法教程[多图]...
  19. 德州扑克实践之三-----比较大小
  20. jeep智能手表软件测评中心的测试,智能手表哪款好之Jeep新款智能手表试用测评...

热门文章

  1. 【免杀】————1、PHP一句话过狗、卫士、D盾等免杀思路
  2. 项目开发(质检督查)
  3. 航模电池充电及使用注意事项
  4. Win11正式发布,新功能炸裂!
  5. Linux下的常见指令以及权限理解(下)
  6. 川大计算机考研英语要求,请问如果考研,四川大学的英语要求高么??属于哪..._考研_帮考网...
  7. 怎么设置个人电脑做服务器(tomcat)
  8. 无需安装任何软件即可在个人电脑中创建隐私空间的方法
  9. Overlapping Experiment Infrastructure: More, Better, Faster Experimentation
  10. 诺基亚n79 java性能_软件升级/硬件测试_诺基亚 N79_手机其它OS-中关村在线