一、Activity 1. Activity的生命周期: 指Activity从启动到销毁的过程,在这个过程中,Activity一般表现为4种状态,分别 是活动状态、暂停状态、停止状态和非活动状态。 源码例子:
以上方法调用顺序:onCreate() --> onStart() --> onResume() --> onPause() --> onStop() --> onDestroy(); 注:当从Activity1 跳转到 Activity2中时,Activity的周期调用函数:onPause() --> onStop();当从Activity2返回到Activity1中时,Activity 的周期调用函数: onRestart() --> onStart() -->onResume() 。 2. Activity的创建: 创建一个Activity可以通过继承extends Activity类的方式来实现。一般创建一个新的 android项目时,会自动生成一个Activity类。然后在子类中重写父类的OnCreate()方 法。在OnCreate()方法中初始化Activity。每创建一个Activity都必须在AndroidManifest 文件中进行注册。 3. 使用Intent在Activity中启动另一个Activity 通过调用当前Activity父类继承而来的startActivity(Intent intent)方法来实现。此方法需 要Intent对象作为参数,Intent的实例化方法: public Intent(); public Intent(Context context,Class<?> cls); 一般使用第二种构造。context:当前Activity对象;cls:将要启动的Activity的Class。 新的Activity组件必须在AndroidManifest.xml文件中进行注册。 4. 使用Intent在Activity之间传值 1. Intent类提供了很多方法可以用来在不同的Activity间传递值: putCharSequenceArrayListExtra(name, value); putStringArrayListExtra(name, value); putIntegerArrayListExtra(name, value); putExtra(name, value); ..... 其中,putExtra()方法被重载,可以传递多种值。 2.在别一个Activity中接收传过来的值,例如取传来的String: this.getIntent().getExtras().getString("myname"); this.getIntent().getStringExtra("mysex"); 以上两种方式作用等同。 3.如果希望得到另一个被调的Activity的返回值,则需要使用以下方法: startActivityForResult(intent, 0); intent中保存传递信息和目标。0是状态码,自定义,后面返回值时要使用。 然后需要在当前主调用Activity类中重写一个回调方法,方法定义如下: protected void onActivityResult(int requestCode, int resultCode, Intent data); 返回的数据将被封装在Inten中,可根据resultCode判断返回状态。 5. 关闭当前显示的Activity界面 this.but2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { finish(); } }); 关闭界面一般采用按扭事件方式。其finish()方法并不会杀掉当前应用程序,只是 相当于手机上的BACK(后退)键功能。 应用在后台还运行着。 6. 界面之间的切换 除了使用Intent可以在不同的Activity间跳转,达到界面切换的效果外,还能使用 this.setContentView(R.layout.main);方式将当前界面切换。 | |
二、Service服务(IntentService) 1. 什么是Service? Service在后台运行,并不和用户进行交互。在默认情况下,Service运行在应用程序 的主线程之中,如果需要在Service中处理一些网络连接等耗时的操作,那么应该将 这些任务放在单独的线程中处理,避免阴塞用户界面。Service按启动方式来区分, 有两种类型:Started和Bound类型。 2. Service的创建和停止 Service的创建和Activity很相似。Service创建是通过继承android.app.Service 类实现的。子类需要重写父类中的onStartCommand()或onBind()方法。主要的 业务逻辑就在这两个方法中实现。不同的启动方式决定着我们需要重写哪一个业务处 理方法。 为了不阴塞用户界面,一般Service与多线程起并用。要停止当前服务,则 只需要在启动它的Activity里面调用stopService(intent)方法。关键是intent对象,必 须传的是要停止的intent对象,也就是之前启动的那个Intent对象,该方法返回一个 表示是否停止服务的boolean值。但是这种停止服务的方法并不会马上停止在另一个 线程中运行的服务,会等待线程运行完毕。也可以在启动的服务类中调用Service类 本身提供的一个stopSelf()。 3. Started和Bound类型Service的区别: 1. Started: A、通过Activity类中的startService()方法来启动 B、一旦启动就运行在后台,即使启动它的对象销毁了,也会执行完 C、通常只启动,不返回值 D、通常用于网络上传下载,操作完成后,自动退出 E、需要重写父类中的onStartCommand()方法 2. Bound: A、通过Activity类中的bindService()来绑定 B、提供客户端服务器接口来启动 C、发送请求,得到返回值,甚至通过IPC来通讯 D、所有绑定者都通出,服务就退出。 E、需要重写类父中的onBind()方法 4. Service生命周期 onCreate()----onStartCommand() / onBind()----onDestory() | |
三、ContentProvider内容提供器 1. 简介: 数据在android之中是程序私有的,ContentProvider提供了多个程序间数据交互的 的机制,还暴露出来一些标准的API来对数据进行操作。ContentProvider使用表的 形式来组织数据。 2. android中的数据存储方式 Share Preference: 基于XML文件 Files: 二进制文件存储,用文件输入输出流 SQLite: 轻量级数据库实现 Network: 基于HTTP的网络存储,典型的IO操作 3. SQLite 1. SQLiteOpenHelper类:是一个数据库帮且助类,常用方法如下:
getReadableDatabase():创建或打开一个只读SQLiteDatabase数据库对象 getWritableDatabase():创建或打开一个可读写SQLiteDatabase数据库对象 onCreate()/onOpen()/onUpgrade():当发生相应的数据库操作时触发该方法。 close():关闭任何的数据库联接。 2. SQLite3支持的数据类型:SQLite允许忽略数据类型,但是,仍然建议在Create Table语句中指定数 据类型,因为数据类型有利于增强程序的可读性。 SQLite支持常见的数据类型,如: VARCHAR、NVARCHAR、TEXT、INTEGER、 FLOAT、BOOLEAN、 CLOB、BLOB、TIMESTAMP、NUMERIC、VARYING、CHARACTER、 NATl0NAI, VARYINGCHARACTER。 Android设备将发布时会有一个内部的SQLite数据库。这个数据库的目 的是允许用户和开发者一个可以在活动中储存信息的地方。 3. SQLiteDatabase类:数据库操作类。可以对DB实现CURD操作。学用方法: close()、delete()、execSQL(String sql)、insert()、query()、update()等,非常类 似于JDBC操作。需要注意的是,这里的CURD操作,有的需要ContentValues 类的支持完成。 4. ContentValues类:对数据库操作时SQL语句的帮助类。是一个HashMap,通过 put()将数据存放在里面。传载参数用。里面可以存放键值对, 键表示“列名”,值表示对应列的“值”。 5. Cursor类:类似于JDBC中的ResultSet类。代表当前查询到的结果集,里面有 着相关的操作结果集的方法,常用方法下如: getColumnCount():反回总的列数 getColumnNames():得到所有列名构成的数组 getCount(): 得到游标(结果集)中所有记录的总数 isAfterLast()、isBeforeFirst(): 在最后/前一行之后/前 isNull(int columnIndex): 如果当前指示的列为空,返回true。 moveToNext()、moveToFirst()、moveToLast():游标操作 简单的获取对象: 因为activity本身就是一个Context,可以直接传Activity进去 SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context); 存储操作: pref.edit().putString("key", "my value").commit(); 获取属性: String value = pref.getString("key"); | |
四、BroadcastReceiver广播接收系统 1. 简介: BroadcastReceiver负责对外部事件做出响应,BroadcastReceiver是不可见的,没有 UI界面。所有用户实现的BroadcastReceiver必须继承自系统的BroadcastReceiver 类,并且需要在AndroidManifest.xml文件中注册。应用程序可以通过 Context.sendBroadcast()将自已的Intent广播出去。 2. 用应举列: 第一步,在Activity中发送广播: Intent intent = new Intent(); intent.putExtra("name", "杨盘根"); intent.setAction(Intent.ACTION_EDIT); context.sendBroadcast(intent); 广播需要Intent的技持,所以需要一个Intent对象。它有两个大的作用,第一个 就是传递数据。第二个是设置Action,用来表示广播出去的是什么动作。 第二步,首先需要定义一个广播接收器,只要从BroadcastReceiver类继承,然 后重写父类中的以下方法: public void onReceive(Context context, Intent intent); 在onReceive方法中对广播进行接收处理。Intent中可以传递数据。 第三步:到AndroidManifest.xml文件中进行BroadcastReceiver进行注册。 <receiver android:name=".BroadcastReceiverTest"> <intent-filter > <action android:name="android.intent.action.EDIT"/> </intent-filter> </receiver> 这一步很重要,而且要注意注册的filter要和Activity中设置的Action相同, 因为广播接收器是根据注册的filter类型来响应发送此类型广播的。如果是2.2 以前的版本,还需要进行授权: <uses-permission android:name="android.permission.RECEIVE_SMS"/> | |
五、Intent对象(重要) 1. 简介: Intent对象是个很重要的对象,四大组件中有三大组件都要依靠它。Intent一旦发出, Android都会准确找到相匹配的一个或多个Activity、Service或Broadcast-Receiver 作为响应。所以,不同类型的Intent消息不会出现重叠:BroadcastIntent消息只会发 送给BroadcastReceiver,而绝不可能发送给Activity或Service。由startActivity()传 递的消息也只可能发送给Activity。 2. 作用 (1)传递Intent启动一个Activity:startActivity()、startActivityForResult() (2)传递Intent启动一个Service:startService()、bindService() (3)通过Intent新加入一个广播:sendBroadcast()、sendOrderedBroadcast()、 sendStickyBroadcast() (4)执行一个查询,ContentResolver的query() |
android四大组件笔记
最新推荐文章于 2022-04-15 14:42:18 发布