(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");
- }
- });
- 新建一个 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 ...
随机推荐
- mysql安装和初次密码修改
下载 第一步:打开网址,https://www.mysql.com,点击downloads之后跳转到https://www.mysql.com/downloads 第二步 :跳转至网址https:// ...
- Linux c读取系统内存使用信息
系统的内存使用信息能够在虚拟文件系统/proc/meminfo中找到,如图 所以只要打开/proc/meminfo文件,然后从中读取信息就好了 #include <stdio.h>#inc ...
- unity中将多张图片进行椭圆运动
GameObject canvas; ; ; ; ; Dictionary<int,GO> storeItem; GameObject main; public static bool r ...
- jsp请求转发与重定向区别小结
1.当使用转发时,JSP容器将使用一个内部方法来调用目标页面,新的页面继续处理同一个请求,而浏览器不会知道这个过程; 2.重定向是第一个页面通知浏览器发送一个新的页面请求. 3.转发不改变URL,重定 ...
- 使用Python爬取代理ip
本文主要代码用于有代理网站http://www.kuaidaili.com/free/intr中的代理ip爬取,爬虫使用过程中需要输入含有代理ip的网页链接. 测试ip是否可以用 import tel ...
- 近期面试总结(Android)
关于近期面试总结(2018年下半年) 有些是老生常谈有些是没有遇到的. 1.HTTP和HTTPS的区别 HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为 ...
- python 参数传递 传值还是传引用
个人推测结论: 可变对象传引用,不可变对象传值 python里的变量不同于c中地址储值模型 a=100 b=100 print(id(a),id(b),a==b,a is b) #8790877986 ...
- 2018年4月中旬的PTA(三)
C高级第三次PTA作业(1) 题目6-1 输出月份英文名 1.设计思路 (1)算法(子函数) 第一步:定义字符型一级指针子函数名getmonth,形参整型n. 第二步:定义长度为12的字符数组指针mo ...
- Go语言for循环语句
for循环语句解释与使用 首先我们定义sum:=0 格式:for i:=1;i<=100;i++{ sum+=i } for 循环100次,首先执行i=1,然后判断i<100,再执行sum ...
- 作用域&&闭包
在了解闭包之前,先了解作用域一,作用域简单来说就是变量和函数可以访问的范围,在es5中变量作用域一般分为全局作用域和局部作用域,这个主要依据是全局变量还是局部变量 情景1: <script> ...