Android提纲复习

作者 汪小祯 日期 2016-11-22
Android提纲复习

简介

自己写的考试提纲的答案,仅供参考,如有错误欢迎指正

卷子结构

一、选择题(30分,15个)
二、填空题(30分,30空)
三、判断题(10分,10个)
四、简答题(10分,2个)
五、应用题(20分,4小题)

问题

1.ADT的主要功能是什么?

ADT(Android Development ToolKit),安装这个插件可以用于开发android应用.

配置好了java的开发环境,安装了开发Android的IDE,下载安装了Android SDK,但是Eclipse还没有和Android SDK进行关联,也就是它们现在是互相独立的,就好比枪和子弹分开了。为了使得Android应用的创建,运行和调试更加方便快捷,Android的开发团队专门针对Eclipse IDE定制了一个插件:Android Development Tools(ADT)。

2.安卓应用程序的结构:

1)字符串资源文件、颜色资源文件分别放在那个目录下?
字符串资源文件 - res/values
颜色资源文件 - res/values

2)图像资源文件放置在那个目录?
图像资源文件 - res/drawable
根据图片大小还将在drawable-hdpi,drawable-ldpi,drawable-mdpi,drawable-xhdpi,drawable0xxhdpi

3)布局文件放置在那个目录?
布局文件 - res/layout

4)Java源程序文件一般放置在那个目录?
Java源程序文件 - src

3.安卓编译器生成的可发布的文件的扩展名是?

.apk

4.安卓编译器把所有的资源的ID号,放在那个Java文档中?

R.java

5.安卓系统的框架,一般分为哪四层?资源管理器、活动管理器定义在哪个结构层?通知管理器notificationManager定义在哪个结构层?

1)安卓系统的框架,一般分为哪四层?
应用程序层,应用程序框架层,系统运行库层,linux核心层

2)资源管理器、活动管理器定义在哪个结构层?
应用程序框架层。

这一层即是编写Google发布的核心应用时所使用的API框架,开发人员同样可以使用这些框架来开发自己的应用,这样便简化了程序开发的架构设计

3)通知管理器notificationManager定义在哪个结构层?
应用程序框架层。

6.一个安卓应用程序这只能有一个活动 Activity吗?同一时刻可以有多个UI交互界面可操作吗?

不是,可以,

通过碎片的方法?

7.安卓应用程序的Activity一般由哪两个最基本的部分组成?

java文件和xml布局文件

8.活动处在Pause状态时,UI界面是不可见的吗?在Stop状态,活动在内存中不存在了吗?活动刚创建的时候,一般最早引发那个事件?

可见,存在,OnCreate()事件

9.安卓活动管理器,采用堆栈还是队列的方式管理活动?

堆栈

10.把一个活动作为对话框显示时,能够引发调用活动的Stop事件吗?怎样在配置文件中设置?

不会

android:theme="@android:style/Theme.Dialog"

11.意图对象Intent无法用于活动间的导航?

可以

12.写出一个导航到拨打指定电话的Intent。

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

需要加入权限

13.*线性布局容器,只能让控件从上到下排列?如何让线性布局容器,让控件从下到上排列?

通过自定义控件实现(ViewGroup),只不过在onLayout()方法中需要实现自己的逻辑,基本的思想就是后一个插入的控件的坐标位置放于前一个控件的前面。

14.所有控件都是从View继承来的吗?

15.布局容器可以嵌套使用吗?

可以

16.显示图像的控件是?显示文本的控件是?显示进度条的控件是?显示列表对象的控件是?显示输入框的控件是?

图像 - ImageView
文本 - TextView
进度条 - ProgressBar
列表 - ListView
输入框 - EditText

17.简述单选对话框的创建和使用步骤。

private int signProfile(int array, int title, final TextView show) { final String[] ssex = getResources().getStringArray(array); AlertDialog.Builder builder = new Builder(SignProfileActivity.this); builder.setTitle(title); builder.setCancelable(false); // 表示选用的是单选的对话框,同理,若是多选或者列表对话框只需表示为 // 多选 :setMultiChoiceItems(arg0, arg1, arg2) // 列表 :setItems(arg0, arg1) builder.setSingleChoiceItems(array, 1, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 列表中任一个选项选中的回调函数 picWhich = which; } }); builder.setPositiveButton(R.string.comfirm, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 确认按键按下的回调函数 show.setText(ssex[signSex]); } }); builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 取消按键按下的回调函数 show.setText(ssex[1]); } }); // 通过builder创建并显示对话框 builder.create().show(); return picWhich; }

18.简述多选选对话框的创建和使用步骤。

将setSingleChoiceItems方法改为setMultiChoiceItems(arg0, arg1, arg2)

19.简述复选对话框的创建和使用步骤。

将setSingleChoiceItems改为setItems(CharSequence[] arg0, OnClickListener arg1)

20.怎样弹出上下文菜单COntextMenu?简述上下文菜单的建立过程。

长按弹出。
建立流程:
1)在Activity中使用上下文菜单,复写onCreateContextMenu() 和 onContextItemSelected()方法;
2)为视图控件View中注册上下文菜单,使用registerForContextMenu(View)方法。
3)在onCreateContextMenu(…ContextMenu menu)中添加菜单项menu.add(…);
4)在onContextItemSelected()中通过设置菜单的id来实现菜单子项的监听。
详细过程

21.选项菜单Menu是怎样弹出的?了解选项菜单文件的格式。

点击手机Menu键

了解选项菜单文件的格式(这个是答什么?)

22.创建toast需要使用其静态方法是?可以创建自定义toast吗?

Toast.makeText(FirstActivity.this,"you clicked button 1",Toast.LENGTH_SHORT).show();
可以自定义,[自定义的方法](http://www.cnblogs.com/salam/archive/2010/11/10/1873654.html)

23.通知对象notification,可以设置让手机振动吗?可以设置让手机的指示灯闪烁红色吗?

可以,方法

24.简述通知对象的使用步骤。

(1)获取NotificationManager实例
  NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);

(2)创建Notification对象,该对象用于存储通知的各种所需信息,我们可以使用它的有参构造函数来创建。
  第一个参数指定通知图标,第二个参数用于指定通知的ticker 内容,当通知刚被创建的时候,它会在系统的状态栏一闪而过,属于一种瞬时的提示信息。第三个参数用于指定通知被创建的时间,以毫秒为单位,
  Notification notification = new Notification(R.drawable.ic_launcher,”This is a ticker text”,System.currentTimeMillis());

(3)调用Notification的setLatestEventIfo()方法对通知的布局进行设定,这个方法接收四个参数,第一个参数是Context。第二个参数用于指定通知的标题内容,下拉系统状态栏就可以看到这部分内容。第三个参数用于指定通知的正文内容,同样下拉系统状态栏就可以看到这部分内容。第四个参数用于指定实现通知点击事件的PendingIntent对象,如果暂时用不到可以先传入null。因此,对通知的布局进行设定就可以写成:
  notification.setLatestEventInfo(context, “This is content title”, “This iscontent text”, null);
  
(4)调用NotificationManager的notify()方法显示通知。

25.*使用列表控件,需要使用适配器。创建自定义适配器,需要从哪个类继承?需要传递哪两个最基本的参数?需要覆写哪个方法才能正确显示数据?

继承BaseAdapter类。context和布局文件
getview()

26.安卓程序启动服务的两种方式是?其引发的服务生命周期中的事件是否一样?

采用Start方式开启
1.定义一个类继承Service
2.在Manifest.xml文件中配置该Service
3.使用Context的startService(Intent)方法启动该Service
4.不再使用时,调用stopService(Intent)方法停止该服务
使用这种start方式启动的Service的生命周期如下:
onCreate()—>onStartCommand()(onStart()方法已过时) —> onDestory()
说明:如果服务已经开启,不会重复的执行onCreate(), 而是会调用onStart()和onStartCommand()。
服务停止的时候调用 onDestory()。服务只会被停止一次。

采用Bind方式开启
1.定义一个类继承Service
2.在Manifest.xml文件中配置该Service
3.使用Context的bindService(Intent, ServiceConnection, int)方法启动该Service
4.不再使用时,调用unbindService(ServiceConnection)方法停止该服务
使用这种start方式启动的Service的生命周期如下:
onCreate() —>onBind()—>onunbind()—>onDestory()
注意:绑定服务不会调用onstart()或者onstartcommand()方法

详细区别

27.停止服务的的方法是?

stopService(intent);

28.要使用远程服务,必须定义一个接口文件,其扩展名一般是?

.aidl

通过AIDL文件定义服务(Service)向客户端(Client)提供的接口,我们需要在对应的目录下添加一个后缀为.aidl的文件

29.简述安卓应用程序发送广播的过程。

发送广播 - 接收广播 - 结束

30.简述安卓程序接收消息的方法和步骤。写出注册接收器的配置文件的片段。

接收消息的方法

public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "接收到的Intent的Action位:"+intent.getAction()+"\n消息内容是:"+intent.getStringExtra("msg"),Toast.LENGTH_LONG).show();
}
}

注册接收器的配置文件

<receiver android:name=".MyReceiver">
<intent-filter >
<action android:name="com.example.BROADCAST"/>
</intent-filter>
</receiver>

31.安卓应用程序可以接收系统级别的广播消息吗?

可以

32.*使用sharedPreferrence对象,可以直接存储对象的数据吗?sharedPreferrence采用什么格式存储数据?

采用XML文件存储key-value键值对数据,位于/data/data/<包名>/shared_prefs目录

33.安卓程序存储数据表格,采用哪种存储技术较好?

SQLite

34.安卓应用程序的数据,要共享给其它应用程序使用,需要采取的存储技术是?

ContentProvider

35.*安卓文件存储数据,可以保存任意类型的数据吗?打开输出文件流的方法是?打开输入文件流的方法是?

打开输出文件流

File file=new File(filename);
FileOutputStream outputStream=context.openFileOutput(filename, Context.MODE_PRIVATE); //创建文件输出流并且指定文件操作模式
outputStream.write(fileContent.getBytes());//写入输出流
outputStream.close();//关闭输出流

打开输入文件流

/**
* 读取数据
* @param filename 文件名称
* @return
*/
public String read(String filename) throws Exception{
File file=new File(filename);
FileInputStream inputStream= new FileInputStream(file); //创建输入流
ByteArrayOutputStream outStream=new ByteArrayOutputStream(); //缓存输出流
byte[] buffer =new byte[1024]; //创建字节数组
int len=0;
while((len=inputStream.read(buffer))!=-1){ //循环读取数据并且将数据写入到缓存输出流中
outStream.write(buffer, 0, len);
}
return new String(outStream.toByteArray());
}

36.安卓程序与服务器程序通信,一般采用哪种方式?

socket

37.Socket客户端程序,需要设置连接服务器的哪几个参数才能正确连接到服务器?

IP地址和端口号

38.Http通信方式中,服务器不能主动往客户端发送数据吗?

应该不能,因为http协议是基于请求/响应模式,客户端要想获取数据,需要通过get请求,而不能有服务器主动发送(话说主动发送的话没有客户端的信息,怎么发给指定的客户端?)

39.编写安卓客户端登录界面程序,UI要求能输入账号、密码,服务器的IP地址和端口号;后台程序能保存最近使用的参数,下次启动程序时,自动恢复上次的数据。

xml界面

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="wxz.name.ui1.MainActivity">
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:ems="10"
android:id="@+id/editText1"
android:hint="账号"
/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:ems="10"
android:id="@+id/editText3"
android:hint="ip地址"
android:layout_below="@+id/editText2"
/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:ems="10"
android:id="@+id/editText4"
android:hint="端口"
android:layout_marginTop="31dp"
android:layout_below="@+id/editText2"
/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:ems="10"
android:layout_marginTop="28dp"
android:id="@+id/editText2"
android:hint="密码"
/>
</RelativeLayout>

java文件

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText userName = (EditText)findViewById(R.id.editText1);
EditText passWord = (EditText)findViewById(R.id.editText2);
EditText ipEdit = (EditText)findViewById(R.id.editText3);
EditText portEdit = (EditText)findViewById(R.id.editText4);
SharedPreferencessharedPreferences= getSharedPreferences("test",
Activity.MODE_PRIVATE);
String username =sharedPreferences.getString("username", "");
String passWord =sharedPreferences.getString("passWord", "");
String ip =sharedPreferences.getString("ip", "");
String port =sharedPreferences.getString("port", "");
userName.text=username;
passWord.text=passWord;
ipEdit.text=ip;
portEdit.text=port;
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
WriteUserInfo()
}
private void WriteUserInfo()
{
SharedPreferences userInfo = getSharedPreferences("user_info",0);
SharedPreferences.Editor editor = userInfo.edit();
editor.putString("username", userName.getText().toString());
editor.putString("passWord", passWord.getText().toString());
editor.putString("ip", ipEdit.getText().toString());
editor.putString("port", portEdit.getText().toString());
editor.commit();
}

40.编写安卓应用程序,要求使用列表对象显示班级学生的信息。性别用图片显示,姓名、学号、专业、地址用文字显示。

以下代码未包括,性别用图片显示这无聊的功能,如果要实现这个功能需要新建一个类重写适配器。代码巨长

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@+id/listView"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</ListView>
</RelativeLayout>
public class MainActivity extends Activity {
private ListView myListView;//列表
private List<String> itemList;//数据
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
myListView = (ListView) findViewById(R.id.listView);
//ArrayAdapter中有三个参数
//Context context 指定现在的上下文
//int textViewResourceId 指定一个包含textview的布局文件,显示每行的信息
//List<String> objects 在listview上显示的数据信息
ArrayAdapter<String> myAdapter = new ArrayAdapter<String>(MainActivity.this,
android.R.layout.simple_list_item_1, itemList);//适配器
}
public void initData() {
itemList = new ArrayList<String>();
for (int i = 0; i < 20; i++) {
string name=“名字”;
string number="15408500000";
itemList.add("姓名:" +name+ "学号"+number);//省略.....name和number需要自己修改
}
}
}