一、用Log打印日志

Log.d("HelloWorldActivity", "onCreate execute");

二、Toast用法

Toast.makeText(MainActivity.this, "You Clicked Button", Toast.LENGTH_SHORT).show();

三、在活动中使用Menu

首先在res目录下新建menu文件夹,接着在这个文件夹下新建一个名叫main的菜单文件,在main.xml中添加如下代码

<item
android:id="@+id/add_item"
android:title="Add" />
<item
android:id="@+id/remove_item"
android:title="Remove" />

回到Activity中重写onCreateOptionsMenu()方法,编写如下代码(返回true表示允许创建的菜单显示出来)

getMenuInflater().inflate(R.menu.main, menu);
return true;

还要定义菜单响应事件,在Activity中重写onOptionsItemSelected()方法,编写代码如下

switch (item.getItemId()){
case R.id.add_item:
Toast.makeText(this, "You clicked Add", Toast.LENGTH_SHORT).show();
break;
case R.id.remove_item:
Toast,makeText(this, "You clicked Remove", Toast.LENGTH_SHORT).show();
break;
default:
}
return true;

四、销毁一个活动

finish();

五、使用显示Intent

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);

六、使用隐式Intent

通过在SecondActivity的<activity>标签下配置<intent-filter>的内容,可以指定当前活动能够响应的action和category,打开AndroidManifest.xml,添加如下代码

<intent-filter>
<action android:name="com.example.activitytest.ACTION_START" />
<category android:name="android.intent.category.DEFAULT" />
  <category android:name="com.example.activitytest.MY_CATEGORY" />
</intent-filter>

在FirstActivity中

Intent intent = new Intent("com.example.activitytest.ACTION_STAART");
intent.addCategory("com.example.activitytest.MY_CATEGORY");
startActivity(intent);

七、更多隐式Intent的用法

调用系统拨号界面

Intent intent = new Intent(Intent.ACTION_DIAL); 
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);

八、向下一个活动传递数据

String data = "Hello SecondActivity"
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("extra_data", data);

在SecondActivity中将传递的数据取出,并打印出来

Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");
Log.d("SecondActivity", data);

九、返回数据给上一个活动

startActivityForResult()方法(第一个参数还是Intent,第二个参数是请求码,用于在之后的回调中判断数据的来源)来启动SecondActivity

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivityForResult(intent, 1);

在SecondActivity中给按钮注册点击事件,并添加返回数据的逻辑(setResult()方法用于向上一个活动返回处理数据。第一个参数用于向上一个活动返回处理结果,一般只使用RESULT_OK或RESULT_CANCELED,第二个参数则把带有数据的Intent传递回去)

Intent intent =  new Intent();
intent.putExtra("data_return", Hello FirstActivity);
setResult(RESULT_OK, intent);
finish();

由于是使用startActivityForResult()方法来启动SecondActivity的,在SecondActivity被销毁之后会回调上一个会动的onActivityResult()方法,因此需要在FirstActivity中重写这个方法来得到返回的数据

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode) {
case 1:
if (resultCode == RESULT_OK) {
String returnData = data.getStringExtra("data_return");
Log.d("FirstActivity", returnData);
}
break;
default:
}
}

还可以通过Back键回到FirstActivity并得到返回数据(重写onBackPressed()方法)

public void onBackPressed(){
Intent intent = new Intent();
intent.putExtra("data_return", "Hello FirstActivity");
setResult(RESULT_OK, intent);
finish();
}

十、活动的启动模式

在实际项目中我们应该根据特定的需求为每个活动指定恰当的启动模式。启动模式一共有4种,分别是standard、singleTop、singleTask和singleInstance,可以在AndroidManifest.xml中通过给<activity>标签指定android:launchMode属性来选择启动模式(返回栈中存在多少实例,就需要连按多少次Back键才嫩退出程序)

1、standard是活动默认的启动模式,对于使用standard模式的活动,系统不会在乎这个活动是否已经在返回栈中 存在,每次启动都会创建该活动的一个新的实例

2、当活动的启动模式指定为singleTop,在启动活动时如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不会再创建新的活动实例。不过当活动并未处于栈顶位置时,这时再启动该活动,还是会创建新的实例的

3、当活动的启动模式指定为singleTask,每次启动该活动时系统首先会在返回栈中检查是否存在该活动的实例,如果发现已经存在则直接使用该实例,并把在这个活动之上的所有活动统统出栈,如果没有发现就会创建一个新的活动实例

4、指定为singleInstance模式的活动会启用一个新的返回栈来管理这个活动

十一、随时随地退出程序

如果我们的程序需要一个注销或者退出的功能,那么就会用到如下方案,只需要用一个专门的集合类对所有的活动进行管理就可以了,代码如下

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

接下来修改BaseActivity中的代码,在onCreate()方法中调用了ActivityCollector的addActivity()方法,表明将当前正在创建的活动添加到活动管理器里(ActivityCollector.addActivity(this);)。然后重写了onDestroy()方法,并调用了ActivityCollector的removeActivity()方法,表明将一个马上要销毁的活动从活动管理器里移除(ActivityCollector.removeActivity(this);)。之后不管在什么地方退出程序,只需要调用ActivityCollector.finishAll()方法就可以了

活动(Activity)的更多相关文章

  1. "浅谈Android"第二篇:活动(Activity)

        距离上一篇文章,过去有半个多月了,在此期间忙于工作,疏于整理和总结,特此写下这篇博文,来谈谈自己对Activity的理解.总所周知,Activity组件在Android中的重要性不言而喻,我们 ...

  2. 安卓-活动Activity

    Android有4大组件,活动 Activity,服务 Service ,广播接收器 Brostcast receiver,内容提供器 Content Provider 安卓活动的生命周期有7种, o ...

  3. Android活动(Activity)创建及生命周期

       Activity是Android的门面,可以与用户进行互动的重要模块,凡是在应用中可以看到的东西,都是放在活动中的.   在学习新的技术时,我喜欢将需要学习的技术与自己懂得技术进行类似比较,而活 ...

  4. Android基础总结(2)——活动Activity

    1.什么是活动(Activity) 活动(Activity)是一种可以包含用户界面的组件,主要用于和用户进行交互.一个应用程序中可以包含零个或多个活动,但不包含任何活动的应用程序很少见. 2.怎么使用 ...

  5. 《第一行代码》学习笔记9-活动Activity(7)

    1.发现Android中的活动是可以层叠的,每启动一个新的活动,就会覆盖在原活动之上, 然后点击Back键会销毁最上面的活动,下面的一个活动就会重新显示出来. 2.Android是使用任务来管理活动的 ...

  6. 《第一行代码》学习笔记6-活动Activity(4)

    1.SecondActivity不是主活动,故不需要配置标签里的内容. 2.Intent是Android程序中各组件之间进行交互的一种重要方式,一般可被用于 启动活动,启动服务,以及发送广播等.Int ...

  7. 《第一行代码》学习笔记3-活动Activity(1)

    1.活动-一种可以包含用户界面的组件,用于和用户进行交互. <Button android:id="@+id/button_1" android:layout_width=& ...

  8. Android之活动Activity用法

    Activity是Android的四大组件之一,本篇将通过Activity的生命周期,Intent的组成部分以及如何使用Intent进行页面之间的消息传递来介绍它的基本用法. 1.activity的生 ...

  9. 活动 Activity 四种加载模式

    singleTop要求如果创建intent的时候栈顶已经有要创建的Activity的实例,则将intent发送给该实例,而不发送给新的实例.(注意是栈顶,不在栈顶照样创建新实例!) singleTas ...

  10. 《第一行代码》学习笔记11-活动Activity(9)

    1.android:theme,是用于给当前活动指定主题的,Android系统内置很多主题可以选择,@android:style/Theme.Dialog则是 让DialogActivity使用对话框 ...

随机推荐

  1. CNN Architectures(AlexNet,VGG,GoogleNet,ResNet,DenseNet)

    AlexNet (2012) The network had a very similar architecture as LeNet by Yann LeCun et al but was deep ...

  2. js函数前加分号和感叹号的作用

    js函数前加分号和感叹号是什么意思?有什么用? 一般看JQuery插件里的写法是这样的 (function($) { //... })(jQuery); 今天看到bootstrap的javascrip ...

  3. java基础20 StringBuffer缓冲类

    1.概要 StringBuffer 其实就是一个存储字符的容器 字符串特点:字符串是常量;它们创建之后不能更改了字符串一旦发生变化,那么立马创建一个新的对象.注意:字符串的内容不适合频繁修改的,因为一 ...

  4. 从源码层次分析asterisk如何产生呼叫

    老规矩,看别人是怎么搞的 http://blog.chinaunix.net/uid-14723273-id-1739552.html over...

  5. 洛谷P3378堆

    传送门啦 #include <iostream> #include <cstdio> #include <cstring> #include <algorit ...

  6. SQLSERVER中的人民币数字转大写的函数实现

    CREATE  FUNCTION [dbo].[f_num_chn] (@num numeric(14,5))RETURNS varchar(100) WITH ENCRYPTIONASBEGIN-- ...

  7. Oracle 提示符

    http://blog.csdn.net/wyzxg/article/details/5647905

  8. CI框架整合UEditor编辑器上传功能

    最近项目中要使用到富文本编辑器,选用了功能强大的UEditor,接下来就来讲讲UEditor编辑器的上传功能整合. 本文UEditor版本:ueditor1_4_3_utf8_php版本 第一步:部署 ...

  9. CCF CSP 201509-3 模板生成系统

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201509-3 模板生成系统 问题描述 成成最近在搭建一个网站,其中一些页面的部分内容来自数据 ...

  10. Codeforces 429C Guess the Tree(状压DP+贪心)

    吐槽:这道题真心坑...做了一整天,我太蒻了... 题意 构造一棵 $ n $ 个节点的树,要求满足以下条件: 每个非叶子节点至少包含2个儿子: 以节点 $ i $ 为根的子树中必须包含 $ c_i ...