android activity
来源:互联网 发布:啄木鸟审计软件 编辑:程序博客网 时间:2024/06/06 12:20
在《Android 开发精要》里面是这样介绍Activity的,它把activity称作是构造交互界面。并和Web页面做了对比,个人觉得比较的很恰当:
- 从运行模式来看,web页面是通过连接从一个页面跳转到另外一个页面,或者回退到前一个页面,从而构成了一个页面栈。而且在浏览器中,用户可以打开多个tab,但只有一个与用户进行交互。Android的也是这样,多任务,但是负责和用户进行交互的是前台任务的栈顶组件。
- 每个Web页面都会有一个或者多个URL进行定位,而且页面切换和数据传输要通过服务器处理,同样,Android的页面组件也是通过类型信息,数据URI信息进行定位,而界面组件的切换和数据传输,都依赖Android组件管理服务统一调度和传递。
- Android页面组件和web页面类似,都近似与功能黑盒。完全的黑盒会导致一些共享数据的传输变得记起困难。web开发中会通过Cookie来存储一些状态信息,通过破坏一定的黑盒特征,来换取执行效率。而android的每个应用进程都有一个应用环境对象(Application Context)。小数据量的共享可以通过他来存储。
先理解下概念,然后我们开始了解Activity。
Activity的创建
当你新建一个Android项目的时候,next,next一直next。会给你生成一个MainActivity。这就创建了一个activity。
- 这个activity就是把activity_main配置中的内容显示在手机屏幕上。
- 自己新建一个activity,不要忘了在AndroidManifest.xml上加上这个activity的声明。
public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}}
Activity的配置
当你创建了一个新的activity的时候,要在AndroidManifest.xml中声明这个activity。如果没有声明,程序会在运行的时候报错。
而且里面的有一个Intent-filter,它表示这个activity是这个app的入口。每个app中只能有一个这种配置的activity。
<activity android:name="com.example.android_intent.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter></activity><activity android:name="com.example.android_intent.otherActivity"></activity>
其中:
android.intent.action.MAIN决定应用程序最先启动的Activity。
android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里。
Activity的生命周期
public class MainActivity extends Activity {private static final String TAG = "MainActivty";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Log.e(TAG, "---> onCreate");}// 销毁前被调用@Overrideprotected void onDestroy() {super.onDestroy();Log.e(TAG, "---> onDestory");}// 暂停前被调用@Overrideprotected void onPause() {super.onPause();Log.e(TAG, "---> onPause");}// stop后重新启动前被调用@Overrideprotected void onRestart() {super.onRestart();Log.e(TAG, "---> onRestart");}// pause后重新获取显示前被调用@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();Log.e(TAG, "---> onResume");}// 开始前被调用@Overrideprotected void onStart() {super.onStart();Log.e(TAG, "---> onStart");}// 停止前被调用@Overrideprotected void onStop() {super.onStop();Log.e(TAG, "---> onStop");}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic void onConfigurationChanged(Configuration newConfig) {// TODO Auto-generated method stubsuper.onConfigurationChanged(newConfig);Log.e(TAG, "---> onConfigurationChanged");}}
这个你可以试试一下场景,看看log输出的情况
- 打开一个这个app
- 按home键
- 按home键之后,再次打开这个app
- 按home键之后,清楚缓存,再次打开这个app
- 点击按钮,跳转到另外一个activity,然后按返回键。
Activity 需要在各个周期点上负责保管状态、恢复状态、传送资料等工作。
Activity的状态:
Android 的虚拟机(VM)是使用堆栈(Stack based)管理。
Active(活动)
「Active」状态是使用者启动应用程序或Activity 后,Activity 运行中的状态。在Android 平台上,同一个时刻只会有一个Activity 处于活动(Active)或运行(Running)状态。
其他的Activity 都处于未启动(Dead)、停止(Stopped)、或是暂停(Pause)的状态。
Paused(暂停)
「Paused」状态是当Activity 暂时暗下来,退到背景画面的状态。当我们使用Toast、AlertDialog、或是电话来了时,都会让原本运行的Activity 退到背景画面。新出现的Toast、AlertDialog 等界面元件盖住了原来的Activity 画面。Activity 处在「Paused」状态时,使用者无法与原Activity 互动。这个时候就应该保存你的一些数据。
Stopped(停止)
「Stopped」状态是有其他Activity 正在执行,而这个Activity 已经离开荧幕,不再动作的状态。透过长按「Home」钮,可以叫出所有处于「Stopped」状态的应用程序列表。在「Stopped」状态的Activity,还可以透过「Notification」来唤醒。
Dead(已回收或未启动)
「Dead」状态是Activity 尚未被启动、已经被手动终止,或已经被系统回收的状态。要手动终止Activity,可以在程序中呼叫「finish」函式。这个时候断开一些耗时耗电的任务。
Activity的切换
Intent intent = new Intent(MainActivity.this,ThemeDialogActivity.class);startActivity(intent);
Activity之间数据共享
protected String getId() {SharedPreferences sp = this. getSharedPreferences("test_user_data",Context.MODE_PRIVATE);String id = sp.getString("id", "123456");return id;}protected void setId(String id) {SharedPreferences sp = this. getSharedPreferences("test_user_data",Context.MODE_PRIVATE);sp.edit().putString("id", id).commit();}
Activity方向和横竖屏切换问题
activity的方向设置
- 使用Activity类的setRequestOrientationsetRequestOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE )方法。
- 也可以在AndroidManifest.xml文件中的activity标签中设置android:screenOrientation="landscape"。
横竖屏切换问题
08-25 23:17:27.965: E/MainActivty(24222): ---> onCreate08-25 23:17:27.965: E/MainActivty(24222): ---> onStart08-25 23:17:27.965: E/MainActivty(24222): ---> onResume08-25 23:17:29.965: E/MainActivty(24222): ---> onPause08-25 23:17:29.965: E/MainActivty(24222): ---> onStop08-25 23:17:29.965: E/MainActivty(24222): ---> onDestory08-25 23:17:30.035: E/MainActivty(24222): ---> onCreate08-25 23:17:30.045: E/MainActivty(24222): ---> onStart08-25 23:17:30.045: E/MainActivty(24222): ---> onResume
public void onConfigurationChanged(Configuration newConfig) {// TODO Auto-generated method stubsuper.onConfigurationChanged(newConfig);Log.e(TAG, "---> onConfigurationChanged");}
08-25 23:23:06.215: E/MainActivty(25898): ---> onCreate08-25 23:23:06.215: E/MainActivty(25898): ---> onStart08-25 23:23:06.215: E/MainActivty(25898): ---> onResume08-25 23:23:07.525: E/MainActivty(25898): ---> onConfigurationChanged
- Android Activity---启动Activity
- Android Activity---关闭Activity
- Android Activity---协调Activity
- Android Activity---启动Activity
- Android Activity---关闭Activity
- Android Activity---协调Activity
- Android Activity
- android activity
- Android Activity
- Android Activity
- android activity
- Android Activity
- android activity
- android activity
- android activity
- Android Activity
- android activity
- android activity
- Java(十四)--创建窗口,添加按钮,接受事件
- Android的HTTP客户端选择及HttpResponseCache的使用
- 近似直径算法的 GraphChi 实现
- 【请求加密】android ios java后台通用DES base64加密
- 清华梦的粉碎—写给清华大学的退学申请 /王垠
- android activity
- HPU 1713 参观城市【邻接表 队列 记录前驱点】
- 1710: 最后一个1
- HDOJ4336Card Collector【概率dp求期望+状态压缩】
- Digital Roots
- 程序员面试金典1.1:确定字符串的所有字符是否全都不同
- 如何更好地管理你的数据库——navicat
- addStretch的作用 .
- 面试中的C++常见问题