Android Studio 活动的最佳实践 知晓当前是在哪一个活动 随时随地地进入程序 启动活动的最佳写法 第一行代码

本文主要是介绍Android Studio 活动的最佳实践 知晓当前是在哪一个活动 随时随地地进入程序 启动活动的最佳写法 第一行代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

来源于郭霖《第一行代码》2.6章 活动的最佳实践


#######################################33

准备活动


1.新建项目ActivityBestTest,使用默认空活动


2.新建空活动SecondActivity、ThirdActivity



3.修改MainActivity、SecondActivity、ThirdActivity活动的布局文件activity_main.xml、activity_second.xml、activity_third.xml,并添加按钮Button

activity_main.xml代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"><Buttonandroid:id="@+id/button_1"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Button 1"/></LinearLayout>

activity_second.xml代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:id="@+id/button_2"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Button 2"/></LinearLayout>

activity_third.xml代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:id="@+id/button_3"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Button 3"/></LinearLayout>

3.将MainActivity.java、SecondActiivty.java、ThridActivity.java类中的继承由ActionBarActivity改为Activity

#######################################33

知晓当前是在哪一个活动

这个技巧将教会你,如何根据程序当前的界面就能判断出这是哪一个活动。(可用于判断别人写的代码中某个界面对应的活动)


1.新建一个BaseActivity类继承自Activity,然后在BaseActivity中重写onCreate()方法




BaseActivity.java的代码

package com.administrator.activitybesttest;import android.app.Activity;
import android.os.Bundle;
import android.util.Log;/*** Created by Administrator on 2015/7/23 0023.*/
public class BaseActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Log.d("BaseActivity", getClass().getSimpleName());}
}
在onCreate()方法中获取当前实例的类名,并通过Log打印出来


修改MainActivity、SecondAcitivty、ThirdActivity的继承结构,让它们不再继承自Activity,而是继承自BaseActivity

重新运行程序,通过点击按钮分别进入到MainActivity、SecondActivity、ThirdActivity的界面,观察LogCat中的打印信息


现在每当我们进入一个活动的界面,该活动的类名就会被打印出来,这样我们就可以时时刻刻知晓当前界面对应的是哪一个活动了



#############################################################################333

随时随地退出程序

通过一个专门的集合类来对活动进行管理

1.新建一个ActivityCollector类作为活动管理器

package com.administrator.activitybesttest;import android.app.Activity;import java.util.ArrayList;
import java.util.List;/*** Created by Administrator on 2015/7/23 0023.*/
public class ActivityCollector {public static List<Activity> activities = new ArrayList<Activity>();public static void addActivity(Activity activity) {activities.add(activity);}public static void removeActivity(Activity activity) {activities.remove(activity);}public static void finishAll() {for (Activity activity : activities) {if (!activity.isFinishing())activity.finish();}}
}

在活动管理器中,通过一个List来暂存活动

然后提供一个addActivity()方法用于向List中添加一个活动,提供了一个removeActiivty()方法用于从List中移除活动

最后提供了一个finishAll()方法用于将List中存储的活动全部都销毁掉


2.修改BaseActivity中的代码

package com.administrator.activitybesttest;import android.app.Activity;
import android.os.Bundle;
import android.util.Log;/*** Created by Administrator on 2015/7/23 0023.*/
public class BaseActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Log.d("BaseActivity", getClass().getSimpleName());ActivityCollector.addActivity(this);}@Overrideprotected void onDestroy() {super.onDestroy();ActivityCollector.removeActivity(this);}
}

在BaseActivity的onCreate()方法中调用ActivityCollector的addActivity()方法, 表明将当前正在创建的活动添加到活动管理器里

然后在BaseActivity中重写onDestroy()方法,并调用了ActivityCollector的removeActivity()方法,表明将一个马上要销毁的活动从活动管理器里移除


3.不管想在社么地方退出程序,只需要调用ActivityCollector.finishAll()方法即可

例如,在ThirdActivity界面想通过点击按钮直接退出程序,只需将代码改成如下所示即可:

    @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_third);Button button3=(Button)findViewById(R.id.button_3);button3.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//  Intent intent=new Intent(ThirdActivity.this, MainActivity.class);//  startActivity(intent);ActivityCollector.finishAll();}});}



#############################################

启动活动的最佳写法


假如SecondActivity中需要用到两个非常重要的字符串参数,在启动SecondActivity的时候必须要传递过来,那么我们很容易写出如下代码:

Intent intent=new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("param1", "data1");
intent.putExtra("param2", "data2");
startActivity(intent);

上述写法完全正确,并且很规范,只是在真正的项目开发上经常会有对接的问题出现。

比如SecondActivity并不是由你开发的,但现在你负责的部分需要有启动SecondActivity这个功能,而你不清楚启动这个活动需要传递哪些活动。

这时无非就有两种方法。

一个是你自己去阅读SecondActiivty中的代码,

而是询问负责编写SecondActivity的同事

这两种方法都比较麻烦,下面提供另一种写法

修改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中添加一个actionStart()方法,在这个方法中完成了Intent的构建,另外所有的SecondActivity中需要的数据都是通过actionStart()方法的参数传递过来的,然后把它们存储到Intent中,最后调用startAction()方法启动SecondActivity。

好处:最重要的一点是一目了然,可以非常清晰地知道启动SecondActivity需要传递那些数据。另外,这样写还简化了启动活动的代码,只需要一行代码就可以启动SecondActivity

修改MainActivity代码

    @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button1=(Button)findViewById(R.id.button_1);button1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//     Intent intent=new Intent(MainActivity.this, SecondActivity.class);//    startActivity(intent);SecondActivity.actionStart(MainActivity.this, "data1", "data2");}});}

给每个活动都添加类似的代码,不仅可以让启动活动变得非常简单,还可以节省不少同事过来询问你的时间 (郭霖写的)


这篇关于Android Studio 活动的最佳实践 知晓当前是在哪一个活动 随时随地地进入程序 启动活动的最佳写法 第一行代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1081689

相关文章

JDK21对虚拟线程的几种用法实践指南

《JDK21对虚拟线程的几种用法实践指南》虚拟线程是Java中的一种轻量级线程,由JVM管理,特别适合于I/O密集型任务,:本文主要介绍JDK21对虚拟线程的几种用法,文中通过代码介绍的非常详细,... 目录一、参考官方文档二、什么是虚拟线程三、几种用法1、Thread.ofVirtual().start(

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工

springboot依靠security实现digest认证的实践

《springboot依靠security实现digest认证的实践》HTTP摘要认证通过加密参数(如nonce、response)验证身份,避免明文传输,但存在密码存储风险,相比基本认证更安全,却因... 目录概述参数Demopom.XML依赖Digest1Application.JavaMyPasswo

Java 线程池+分布式实现代码

《Java线程池+分布式实现代码》在Java开发中,池通过预先创建并管理一定数量的资源,避免频繁创建和销毁资源带来的性能开销,从而提高系统效率,:本文主要介绍Java线程池+分布式实现代码,需要... 目录1. 线程池1.1 自定义线程池实现1.1.1 线程池核心1.1.2 代码示例1.2 总结流程2. J

java程序远程debug原理与配置全过程

《java程序远程debug原理与配置全过程》文章介绍了Java远程调试的JPDA体系,包含JVMTI监控JVM、JDWP传输调试命令、JDI提供调试接口,通过-Xdebug、-Xrunjdwp参数配... 目录背景组成模块间联系IBM对三个模块的详细介绍编程使用总结背景日常工作中,每个程序员都会遇到bu

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

Vue实现路由守卫的示例代码

《Vue实现路由守卫的示例代码》Vue路由守卫是控制页面导航的钩子函数,主要用于鉴权、数据预加载等场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、概念二、类型三、实战一、概念路由守卫(Navigation Guards)本质上就是 在路

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

分析 Java Stream 的 peek使用实践与副作用处理方案

《分析JavaStream的peek使用实践与副作用处理方案》StreamAPI的peek操作是中间操作,用于观察元素但不终止流,其副作用风险包括线程安全、顺序混乱及性能问题,合理使用场景有限... 目录一、peek 操作的本质:有状态的中间操作二、副作用的定义与风险场景1. 并行流下的线程安全问题2. 顺