安卓应用总结.docx
- 文档编号:29034199
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:33
- 大小:225.51KB
安卓应用总结.docx
《安卓应用总结.docx》由会员分享,可在线阅读,更多相关《安卓应用总结.docx(33页珍藏版)》请在冰豆网上搜索。
安卓应用总结
安卓应用总结
1、Activity类
1、生命周期
Android定义了一系列与生命周期相关的方法,在我们自己的Activity中,只是根据需要复写需要的方法,Java的多态性会保证我们自己的方法被虚拟机调用(即回调方法)。
publicclassOurActivityextendsActivity{
protectedvoidonCreate(BundlesavedInstanceState);
setContentView(R.layout.main);//设置界面布局
protectedvoidonStart();//启动
protectedvoidonResume();//进入界面之前
protectedvoidonPause();
protectedvoidonStop();
protectedvoidonDestroy();
}
onCreate==>onStart()==>onResume()==>running==>onPause()==>onStop()==>onDestroy()
注:
在这些生命周期方法中必须调用父类的该方法
2、启动另外一个Activity
Activity.startActivity()方法可以根据传入的参数启动另外一个Activity:
Intentintent=newIntent(CurrentActivity.this,OtherActivity.class);
startActivity(intent);
注:
OtherActivity同样需要在AndroidManifest.xml中定义
3、Activity之间通信
在Android中,不同的Activity实例可能运行在一个进程中,也可能运行在不同的进程中。
因此我们需要一种特别的机制帮助我们在Activity之间传递消息。
Android中通过Intent对象来表示一条消息,一个Intent对象不仅包含有这个消息的目的地,还可以包含消息的内容,这好比一封Email,其中不仅应该包含收件地址,还可以包含具体的内容。
对于一个Intent对象,消息“目的地”是必须的,而内容则是可选项。
Intent的中文意思是目的。
在Android中也是"目的"的意思。
就是我们要去哪里,从这个activity要前往另一个Activity就需要用到Intent。
发件人:
(CurrentActivity类中)
Intentintent=newIntent(CurrentActivity.this,OtherActivity.class);
//创建一个带“收件人地址”的email
Bundlebundle=newBundle();//创建email内容
bundle.putBoolean("boolean_key",true);//编写内容
bundle.putString("string_key","string_value");
intent.putExtra("key",bundle);//封装email
startActivity(intent);//启动新的Activity
收件人:
(OtherActivity类中)
Intentintent=getIntent();//收取email
Bundlebundle=intent.getBundleExtra("key");//打开email
bundle.getBoolean("boolean_key");//读取内容
bundle.getString("string_key");
使用SharedPreferences
SharedPreferences使用xml格式为Android应用提供一种永久的数据存贮方式。
对于一个Android应用,它存贮在文件系统的/data/data/your_app_package_name/shared_prefs/目录下,可以被处在同一个应用中的所有Activity访问。
Android提供了相关的API来处理这些数据而不需要程序员直接操作这些文件或者考虑数据同步问题。
//写入SharedPreferences
SharedPreferencespreferences=getSharedPreferences("name",MODE_PRIVATE);
Editoreditor=preferences.edit();
editor.putBoolean("boolean_key",true);
editor.putString("string_key","string_value");
mit();
//读取SharedPreferences
SharedPreferencespreferences=getSharedPreferences("name",MODE_PRIVATE);
preferences.getBoolean("boolean_key",false);
preferences.getString("string_key","default_value");
4、Activity的IntentFilter
IntentFilter描述了一个组件愿意接收什么样的Intent对象,Android将其抽象为android.content.IntentFilter类。
在Android的AndroidManifest.xml配置文件中可以通过
当程序员使用startActivity(intent)来启动另外一个Activity时,如果直接指定intent了对象的Component属性,那么ActivityManager将试图启动其Component属性指定的Activity。
否则Android将通过Intent的其它属性从安装在系统中的所有Activity中查找与之最匹配的一个启动,如果没有找到合适的Activity,应用程序会得到一个系统抛出的异常。
Action匹配
Action是一个用户定义的字符串,用于描述一个Android应用程序组件,一个IntentFilter可以包含多个Action。
在AndroidManifest.xml的Activity定义时可以在其
name="android.intent.action.MAIN"/> name="com.zy.myaction"/> …… 如果我们在启动一个Activity时使用这样的Intent对象: Intentintent=newIntent(); intent.setAction("com.zy.myaction"); 那么所有的Action列表中包含了“com.zy.myaction”的Activity都将会匹配成功。 Android预定义了一系列的Action分别表示特定的系统动作。 这些Action通过常量的方式定义在android.content.Intent中,以“ACTION_”开头。 我们可以在Android提供的文档中找到它们的详细说明。 URI数据匹配 一个Intent可以通过URI携带外部数据给目标组件。 在 mimeType属性指定携带外部数据的数据类型,scheme指定协议,host、port、path指定数据的位置、端口、和路径。 如下: mimeType="mimeType"android: scheme="scheme" android: host="host"android: port="port"android: path="path"/> 如果在IntentFilter中指定了这些属性,那么只有所有的属性都匹配成功时URI数据匹配才会成功。 Category类别匹配 5、一些关于Activity的技巧 锁定Activity运行时的屏幕方向 Android内置了方向感应器的支持。 在G1中,Android会根据G1所处的方向自动在竖屏和横屏间切换。 但是有时我们的应用程序仅能在横屏/竖屏时运行,比如某些游戏,此时我们需要锁定该Activity运行时的屏幕方向, screenOrientation属性可以完成该项任务,示例代码如下: name=".EX01" android: label="@string/app_name" android: screenOrientation="portrait">//竖屏,值为landscape时为横屏 ………… 全屏的Activity 要使一个Activity全屏运行,可以在其onCreate()方法中添加如下代码实现: //设置全屏模式 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); //去除标题栏 requestWindowFeature(Window.FEATURE_NO_TITLE); 在Activity的Title中加入进度条 为了更友好的用户体验,在处理一些需要花费较长时间的任务时可以使用一个进度条来提示用户“不要着急,我们正在努力的完成你交给的任务”。 如下图: 在Activity的标题栏中显示进度条不失为一个好办法,下面是实现代码: //不明确进度条 requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); setContentView(R.layout.main); setProgressBarIndeterminateVisibility(true); //明确进度条 requestWindowFeature(Window.FEATURE_PROGRESS); setContentView(R.layout.main); setProgress(5000); 2、布局 几种布局方式: View的布局显示方式有下面几种: 线性布局(LinearLayout)、相对布局(RelativeLayout)、表格布局(TableLayout)、网格视图(GridView)、标签布局(TabLayout)、列表视图(ListView)、绝对布局(AbsoluteLayout)帧布局(FrameLayout)。 语: 布局相对比较简单,这里不再详细介绍。 3、控件的使用 1、ListView、Spinner、GridView与Gallery ListView和Gallery,Spinner有一个共同点: 它们都是AdapterView的子类。 AdapterView的显示可以通过数据绑定来实现,数据源可以是数组或是数据库记录,数据源和AdapterView是通过Adapter作为桥梁。 通过Adapter,AdatperView可以显示数据源或处理用户选取事件 适配器有: BaseAdapter(较常用)、ArrayAdapter、SimpleAdapter 加载数据的步骤 1)activity的layout中声明控件 2)在layout/创建ListView的一个item所需要的layout文件 3)初始化数据源 4)初始化适配器 5)setAdapter 各自实现的监听 ListView: onItemClickedListeneronItemLongClickedListener Spinner: (只显示一项数据,通过弹出式Dialog从其他数据中选择一项)onItemSelectedListener GridView: android: columnWidth android: numColumnandroid: strechMode android: horizontalSpacingandroid: verticalSpacing OnItemClickListener/OnItemLongClickListener 2、ImageSwitcher 为图片切换提供了简单动画效果,使用该控件时必须调用setFactory()方法来构造一个ImageView控件 setImageResource() 3、AlertDialog DialogInterface.OnClickListener 创建: newAlertDialog.Builder(context).setTitle().setMessage()/.setView(Viewview).setPositiveButton() .setNegitiveButton().create().show() 4、Menu的创建 OptionsMenu通过单击Menu按键出现 @Override onCreateOptionsMenu(): 设置菜单项 menu.add().setIcon() SubMenusubMenu=menu.addSubMenu() onOptionsItemSelected(): 处理菜单中某个子项被选中后的逻辑 intid=item.getItemId(); ContextMenu通过在控件上长按出现 @Override onCreateContextMenu() onContextItemSelected() 调用registerForContextMenu(Viewview)方法==>为view设置ContextMenu 4、其他 1、数据存储 SharedPreferences 项目内部/shared_prefs/*.xml 有格式的存储简单私有数据: long,int,float,boolean,string 以key+value形式存储数据 SharedPreference get()//读取数据 edit()//编辑 SharedPreference.Editor put()//写入数据 commit()//提交写入的数据 InternalStorage 项目内部/files/*.* 项目内部存储私有数据 FileInputStreamfis=openFileInput(name); FileOutputStreamfos=openFileOutput(name,mode); mode: Context.MODE_PRIVATE,Context.MODE_APPEND ExternalStorageSD卡存储public数据 IO流常用class File(文件,目录) FileInputStream,FileOutputStream FileReader,FileWriter BufferedReader(readLine)/BufferedWriter InputStreamReader/OutputStreamWriter(字节流==>字符流) ByteArrayOutputStream(内存,toByteArray()) String(getBytes(),getBytes(Stringencode),String(byte[]),String(byte[],encode)) ExternalStorage 注意: (Environment) 1)先判断SD卡是否挂载(即sd卡是否可用)MOUNT if(! Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ //....... return; } 2)SD卡根位置不要去描述("/mnt/sdcard"),而是通过方法获取 StringsdPath=Environment.getExternalStorageDirectory().getAbsolutePath(); 3)往SD卡写入数据时,需要给出写入权限(permission) android.permission.WRITE_EXTERNAL_STORAGE ④SQLiteDatabase(SQLite数据库(适用于嵌入式开发的小规模数据库)) SQL: StructuredQueryLanguage结构化的查询语言 表Table: 存储数据,一行就是一条数据 基本SQL语句: 增,删,改,查 .sqlite3进入数据库客户端 .tables查看当前库下所有表 .schema表名查看表结构 .exit退出SQLite客户端 1)创建表 CREATETABLE表名( 列1定义, 列2定义, ...... ) 列定义: 列名数据类型约束 数据类型: integer,real,text,blob(大二进制)其中text类型的值使用单引号''引起来 约束: primarykey主键约束,要求该列值不能重复而且不能为null(一个表中只能有一个primarykey约束) notnull非空约束,要求该列必须有值 autoincrement自增长标识列,该列不给出值时系统会自动赋值;要求该约束必须应用在integer并且primarykey列上 check条件表达式,要求该列的值必须满足条件表达式 default值默认约束,该列不给值,使用默认值 foreignkey外键约束,约束该列的值只能主表中关联列值,或者该列值为null Eg: CREATETABLEstudent( _idintegerprimarykeyautoincrement, nametextnotnull, teltext, scoreinteger ); 2)插入数据 INSERTINTO表名values(列1值,列2值,...)//每列都要给值,其中autoincrement列可以给值为null INSERTINTO表名(列1,列2,...)values(列1值,列2值,...)//按照表名后面的列给值 3)查看数据 SELECT列1,列2,...//其实可以使用*代表所有列 FROM表名 [where条件表达式]//行过滤条件 [groupby分组表达式[having组条件表达式]] [orderby排序表达式asc|desc]//查询数据时,默认按照主键列升序,asc升序,desc降序 特殊地: 聚合函数 count(*),count(表达式) count(*)统计行数,count(表达式)统计表达式的值不为null的行数 sum(表达式),avg(表达式) max(表达式),min(表达式) 条件描述: 逻辑运算符: and,or,not 关系运算符: >,>=,<,<=,=,! =,<> in(值1,值2,...) between...and 字符列like'值': 其中描述值时可以使用_(匹配1个任意字符)或者%(匹配任意个任意字符) select*fromstudentwhere_idin(1,3); select*fromstudentwhere_idbetween1and3; selectnamefromstudentwherenamelike'%a%'; selectnamefromstudentwherenamelike'a%'; selectnamefromstudentwherenamelike'a_'; selectmax(score),min(score)fromstudent; selectcount(*),count(tel)fromstudent; 4)更新数据update UPDATE表名 SET列名=值,列2名=值,.... [WHERE条件表达式] updatestudentsettel='65656512'; updatestudentsettel='121212'where_idin(1,3,5,6); updatestudentsetscore=60wherescore<60 updatestudentsetscore=score+10wherescore<=90; 5)删除数据delete DELETEFROM表名[WHERE条件表达式] DELETEFROMstudentwherescore<=75; 6)删除表 DROPTABLE表名 7)Android项目中操纵SQLite数据库 1)extendsSQLiteOpenHelper{ @Override onCreate(SQLiteDatabasedb){ db.execSQL("建表语句") } 2)调用SQLiteOpenHelper的 getReadableDatabase()或者
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 应用 总结