活动(Java)
手动创建一个活动的全过程
1.创建一个活动
2.创建和加载布局(根元素一般选用LinearLayout的):
1 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" |
①添加按钮用Button控件
②利用setContentView()方法加载布局
3.在AndroidManifest中注册
4.配置主活动(也可以用label给活动添加个标题,标题栏显示在最顶部)
Toast
1.定义:一种提醒方式,信息出现一段时间会自己消失,不会占用屏幕空间
2.使用方式:
1 | Toast.makeText(FirstActivity.this, "You clicked Button 1", Toast.LENGTH_SHORT).show(); |
3.利用makeText()创建一个Toast对象,传入三个参数,第一个参数是Context,也就是上下文,第二个参数是文本内容,第三个参数是显示时长
Menu
1.要现在res目录下创建一个新的文件夹menu
2.创建Menu resource file
3.修改其中的代码
1 | <item |
其中 item 标签就是用来创建具体的某一个菜单项
4.接着重写onCreateOptionsMenu()方法

5.然后利用onOptionsItemSelected()方法定义菜单响应事件
1 |
|
Intent
用途:启动活动,启动服务,发送广播
显式Intent
1 | Intent intent = new Intent(FirstActivity.this,SecondActivity.class); |
Intent构造函数接收两个参数,第一个参数是Context上下文,第二个是想要启动的活动目标 然后通过startActivity()方法执行这个intent
隐式Intent
1.在activity下配置intent-filter,指定当前活动能响应的action和category
1 | <intent-filter> |
2.只有action和category能够同时匹配上intent指定的action和category时,活动才能响应该intent
1 | Intent intent = new Intent("com.example.activitytest.ACTION_START"); |
3.每个intent只能指定一个action却可以指定多个category
4.可以利用addCategory()方法来添加category,在活动中添加一个category同时也需要在intent-filter下进行一个声明
更多隐式intent用法
1.通过Intent启动浏览器等:

同时我们还应该在intent-filter中配置一data标签

除了浏览器也可以是其他的网址:

向下一个活动传递数据
1.可以利用putExtra()方法,把我们想要传递的数据存在intent中,启动一个活动后,只需要再把数据取出就可以了。
2.putExtra()方法使用需要两个参数,第一个是键用于后面取值,第二个是要传递的数据。
1 | String data="Hello SecondAcitivity"; |
3.取值时首先要通过getIntent()方法获取intent,然后调用getStringExtra()方法获取数据
1 | Intent intent = getIntent(); |
返回数据给上一个活动
1.利用startActivityForResult()方法来启动活动
2.调用setResult()方法用于向上一个活动返回数据
3.用startActivityForResult()方法启动活动该活动销毁后会调回上一个活动的onActivityResult()方法,所以重写该方法可以得到返回的数据
例子:



4.如果通过back键销毁活动则可以通过重写onBackPressed()方法解决
1 | @Override |
活动的生命周期
返回栈
一个任务就是一组存放在栈里的集合,这个栈也叫返回栈
活动状态
1.运行状态:处于栈顶
2.暂停状态:不在栈顶但仍然可见
3.停止状态:不在栈顶且不可见
4.销毁状态:从返回栈中移除
生存期
1.七种回调方法:
①·onCreate():初始化操作
②·onStart():活动由不可见变为可见
③·onResume():此时活动一定处于栈顶且运行状态
④·onPause():在准备启动或恢复另一个活动时调用
⑤·onStop():活动完全不可见时用,如果启动的新活动是对话框式的,则会调用onPause(),而onStop()不会执行
⑥·onDestroy():销毁之前调用
⑦·onRestart():活动由停止变为运行状态前调用
完整生存期:①到⑥之间经历的方法
可见生存期:②到⑤之间
前台生存期:③到④之间

对话框式的主题需要在AndroidManifest中更改配置如下所示:
1 | android:theme="@style/Theme.Appcompat.Light.Dialog.Alert" |
活动被回收了怎么办
1.利用onSaveInstanceState()方法回调,这个方法会携带一个Bundle类型参数,该类型提供了一系列方法保存数据
2.例子:


活动的启动模式
在AndroidManifest中用android:launchMode更改模式
(1)standard:默认启动模式

(2)singleTop:在启动活动时如果发现栈顶已经是该活动,则可以直接使用他,不再创建新活动

(3)singleTask:每次启动活动时会先检查存不存在该活动,如果存在直接调用此活动,并把该活动上面的活动通通出栈

(4)singleInstance:会启用一个新的返回栈来管理活动

知晓当前在哪一个活动
1.创建一个新的Java类继承AppCompatActivity并重写onCreate方法在该类中获得当前实例的类名
1 | public class BaseActivity extends AppCompatActivity { |
2.让其他的活动都继承新建的类
3.观察logcat中各界面的打印信息即可得出结论
随时随地的退出程序
1.可以创建一个专门的集合对所有活动进行管理就可以了
1 | public class ActivityCollector { |
2.设计好管理类接下来对BaseActivity类进行修改
1 | public class BaseActivity extends AppCompatActivity { |
3.这两步操作完,如果以后想直接退出程序直接使用finishAll()方法即可
启动活动的最佳写法
利用actionStart()方法
1 | public static void actionStart(Context context,String data1,String data2){ |
1 | SecondActivity.actionStart(FirstActivity.this,"data1","data2"); |
用上面这句话直接启动




