(Android第一行代码实验一)活动的最佳实践
活动的最佳实践
1.知晓当前是在哪一个活动
这个技巧将教会你,如何根据程序当前的界面就能判断出这是哪一个活动。
- 首先需要新建一个 BaseActivity 继承自 Activity,然后在 BaseActivity中重写 onCreate()方法。
public class BaseActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { //在 onCreate()方法中获取了当前实例的类名,并通过 Log打印了出来。 super.onCreate(savedInstanceState); Log.d("BaseActivity", getClass().getSimpleName()); } }接下来我们需要让 BaseActivity 成为 ActivityTest 项目中所有活动的父类修改 FirstActivity、SecondActivity和 ThirdActivity的继承结构,让它们不再继承自 Activity,而是 继承自 BaseActivity。现在重新运行程序,然后通过点击按钮分别进入到 FirstActivity、SecondActivity 和 ThirdActivity的界面,这时该活动的类名就会被打印出来, 这样我们就可以 时时刻刻知晓当前界面对应的是哪一个活动了,观察logcat中的打印信息就可以时时刻刻知晓当前界面对应的是哪一个活动了。
2.随时随地退出程序
你会发现当前想退出程序是非常不方便 的,需要连按三次 Back 键才行,该方法可以解决这个问题。
解决思路:
只需要用一个专门的集合类对所有的活动进行管理就可以了,
- 新建一个 ActivityCollector类作为活动管理器
public class ActivityCollector { //,我们通过一个 List来暂存活动, public static List<Activity> activities = new ArrayList<Activity>(); //然后提供了一个 addActivity()方法用 于向 List 中添加一个活动 public static void addActivity(Activity activity) { activities.add(activity); }
//提供了一个 removeActivity()方法用于从 List 中移除活动。
public static void removeActivity(Activity activity) { activities.remove(activity); }
//最后 提供了一个 finishAll()方法用于将 List中存储的活动全部都销毁掉。
public static void finishAll() { for (Activity activity : activities) { if (!activity.isFinishing()) { activity.finish(); } } }
}- 修改 BaseActivity中的代码
public class BaseActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d("BaseActivity", getClass().getSimpleName()); //调用了 ActivityCollector 的 addActivity()方法,表明 将当前正在创建的活动添加到活动管理器里 ActivityCollector.addActivity(this); } @Override //重写 onDestroy()方法, 并调用了 ActivityCollector 的 removeActivity()方法,表明将一个马上要销毁的活动从活动管 理器里移除。 protected void onDestroy() { super.onDestroy(); ActivityCollector.removeActivity(this); } }从此以后,不管你想在什么地方退出程序,只需要调用 ActivityCollector.finishAll()方法 就可以了.
Button button3 = (Button) findViewById(R.id.button_3); button3.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //调用 ActivityCollector.finishAll()方法 ActivityCollector.finishAll(); } });3.启动活动的最佳写法
- 启动 SecondActivity传递字符串参数最佳写法。
public class SecondActivity extends BaseActivity { /*所有 SecondActivity中需要的数据都是通过 actionStart()方法的参数传递过来的,然 后把它们存储到 Intent中,最后调用 startActivity()方法启动 SecondActivity。*/ public static void actionStart(Context context, String data1, String data2) { Intent intent = new Intent(context, SecondActivity.class); intent.putExtra("param1", data1); intent.putExtra("param2", data2); context.startActivity(intent); } …… }这样写是一目了然,SecondActivity 所需要的数据全 部都在方法参数中体现出来了.
- 现在只需要一行代码就可以启动 SecondActivity
button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //传入参数 SecondActivity.actionStart(FirstActivity.this, "data1", "data2"); } });
- 现在只需要一行代码就可以启动 SecondActivity
- 启动 SecondActivity传递字符串参数最佳写法。
- 修改 BaseActivity中的代码
- 新建一个 ActivityCollector类作为活动管理器
(Android第一行代码实验一)活动的最佳实践的更多相关文章
- 《Android第一行代码》笔记
学习Android开发差点儿相同有两年时间了.期间也做了大大小小的一些项目.近来抽出闲暇想把Android基础强化一下,之前在网上看到了郭霖郭大神的几篇博客.从中受益不少.于是花了近一周时间看完了郭神 ...
- Android 第一行代码(第二版)分享
今天从网上好不容易看到了别人转发的pdf版的 第一行代码通过下载我把它存在了百度云里面了与大家共享 http://pan.baidu.com/s/1bRztF4
- android第一行代码-3.activity之间的调用跟数据传递
前面两节所有应用都是同一个activity中的,是时候讲activity之间交互的操作了,此后会涉及到intent这个概念,这也算一个新的里程碑开始. 主要内容包括intent的使用,以及activi ...
- 1.3.4分析你的第一个Android程序——Android第一行代码(第二版)笔记
切换项目结构模式 Project模式的项目结构 我们将项目切换成Project模式,这就是真实的目录结构. .gradle和.idea 这两个目下放置的都是Android Studio自动生成的一些文 ...
- android第一行代码-6.自定义控件的实现
0.假设一个应用中标题栏控件都是共用的,如果每个activity都需要设置button,绑定方法,那代码就会很臃肿.那我们可以自定义控件,然后继承这个控件就行了. 自定义控件为TitleLayout, ...
- android第一行代码-2.activity基本用法
摘要: 本节主要涉及到的有activity的创建,标题栏隐藏,button绑定方法(toast的使用),menu使用,活动销毁 1.activity的创建跟注册 创建: public class Te ...
- Android 第一行代码
::-/stuapplication.pla.edu.cn.fragmentbestpractice W/dalvikvm﹕ VFY: unable to find class referenced ...
- alexkn android第一行代码-8.sqlite使用
Android自带sqlite数据库,因此常见操作应该都掌握.包括数据库的创建/升级以及增删改查. 1.创建数据库 public class MyDatabaseHelper extends SQLi ...
- android第一行代码-1.项目结构
0.项目结构 一个简单的android项目结构大致如下 入口就是MainActivity这个类,如果对于一个陌生的项目,最好的办法是看AndroidMainifest.xml,如下 <?xml ...
随机推荐
- 31 位域、空类的sizeof值
1 分析下列程序: #include<iostream> using namespace std; struct s { int x: 3; int y: 4; int z: 5; dou ...
- 内存泄漏 tensorflow
http://blog.csdn.net/qq_25737169/article/details/78125550
- Python基础10_函数
直接贴笔记 : #!/usr/bin/env python # coding:utf-8 # 定义函数时要写成良好的注释习惯 通常用三个单引号 def test(x): ''' 计算一个y=2*x+1 ...
- 不得不补:PHP的JSON, SQL
不管怎么说,还是得感谢慕课网,提供了很多免费的视频教学. 学习自: https://www.imooc.com/view/68 前端页面: <!DOCTYPE html> <html ...
- python自学第11天-单线程并发、迭代器,序列化,获取路径
单线程并发 import time def consumer(name): print("%s 准备吃包子了"%name) while True: baozi=yield#变成一个 ...
- idea设置代码块
转:https://blog.csdn.net/boy_Kenny/article/details/55223078?utm_source=blogxgwz4 idea设置代码块 1.代码模板场景介绍 ...
- Tex_安装_在Ubuntu系统下
$\LaTeX$是一个强大的排版软件,在数学公式.表格.甚至是科学绘图方面有着独特优势.本文在Ubuntu系统下,整理Tex安装相关的操作,以为备忘.所引链接都未同作者商量,如有不妥望及时告知. 命令 ...
- 剑指Offer 53. 表示数值的字符串 (字符串)
题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如,字符串"+100","5e2","-123","3.1 ...
- LINUX系统配置
LINUX系统配置 Linux 安装jdk方法; Linux Tomcat 安装与配置 Linux redis 安装与配置 (例1) Linux redis安装配置(例2) NGINX 安装 Linu ...
- 2019微软Power BI 每月功能更新系列——2月Power BI 新功能学习
哈喽,小伙伴们,我是小悦悦,好久不见~ 春节假期结束,新一轮的工作开始,祝大家猪年如意,开工大吉! 今天小悦悦带你走入猪年学习的正确打开方式——Power BI新一年的持续更新学习! Power ...