《Android移动开发基础案例教程》复习知识点

 

参考书目:《Android移动开发基础案例教程》 

出版社:中国工信出版集团丨人民邮电出版社

编著:黑马程序员

---------------

很认真写的期末考试总结,供大家参考!

 

· 移动通信1G、2G、3G、4G的概念、优缺点

答:1G是模拟信号,支持语音通话,安全性差,容易被窃听,代表产品:大哥大;2G采用数字信号传输,信号强,支持收发短信,支持小的Java程序,支持数据业务,GPRS工作在2.5GHz,EDGE工作在2.75GHz;3G主要技术有TDSCDMA(中国移动)、WCDMA(中国联通)和CDMA2000(中国电信),HSDPA工作在3.5GHz,提供较快的数据业务;4G是指第四代移动通信技术,主要技术有TD-LTE(中国移动、中国联通、中国电信)和FDD-LTE(中国联通、中国电信),提供更快的数据业务,通过VoLTE技术,支持语音通话在4G频段上进行,提供高清视频、语音通话。

· Android体系结构由几层构成?分别是哪几层?简单介绍每一层的概念、应用

答:四层,分别是应用程序层(Applications)、应用程序框架层(Application Framework)、核心类库层(Libraries)以及Linux内核层(Linux Kernel)。应用程序层是应用程序的集合,各种安装在手机上的App都属于这一层;应用程序框架层主要提供了/构建应用程序时/用到的各种API接口,Android自带的一些核心应用就是使用这些API完成的,例如视图(View)、活动管理器(Activity Manager)、通知管理器(Notification Manager)等;核心类库层包含了系统库/及Android运行时库,系统库主要是通过C/C++库来为Android系统提供主要的特性支持,如OpenGL/ES库提供了3D绘图的支持,Android运行时库提供了Dalvik虚拟机(安卓5.0开始彻底更换为ART);Linux内核层为Android设备的各种硬件提供了底层的驱动,如显示驱动、音频驱动等。

· Drawable、Layout、AndroidManifest.xml分别存放什么内容?

答:src目录是源代码目录,存放的是.java文件;gen目录存放ADT自动生成的java文件;bin目录保存了编译过程中产生的文件,以及最终的apk文件;res是资源目录,其中,drawable目录用来保存同一个程序中针对不同屏幕尺寸需要显示的不同大小的图像文件,layout目录用来保存与用户界面相关的布局文件,values目录保存颜色、风格、主题和字符串等资源;project.properties文件记录了Android工程的相关设置;AndroidManifest.xml是XML格式的Android程序声明文件,包含了Android系统运行Android程序前所必须掌握的重要信息,这些信息包括应用程序名称、icon、包名称、模块组成、授权和SDK最低版本等,而且每个Android程序必须在根目录下包含一个AndroidManifest.xml文件。

· Android的常用布局有几种?分别简单介绍它们的特点

答:分别有LinearLayout(线性布局)、RelativeLayout(相对布局)、FrameLayout(帧/框架布局)、TableLayout(表格布局)、GridLayout(网格布局)和AbsoluteLayout(绝对布局)六种。线性布局(LinearLayout)主要以水平和垂直方式来显示界面中的控件;相对布局(RelativeLayout)是通过相对定位的方式指定控件位置,后放置的控件依赖于先放置的控件,是Android默认的布局;帧布局(FrameLayout)是Android中最简单的布局,该布局为每个加入其中的控件创建一个空白区域,所有控件都默认显示在屏幕左上角,并按照先后放入的次序重叠排放,先放入的控件显示在最底层,后放入的控件显示在最顶层;表格布局(TableLayout)是以表格形式排列控件的,通过行和列将界面划分为多个单元格,每个单元格都可以添加控件;网格布局(GridLayout)是Android 4.0新支持的布局方式,将用户界面划分为网格,界面元素可随意摆放在这些网格中;绝对布局(AbsoluteLayout)是通过指定x、y坐标来控制每一个控件位置的。

· TextView和Button的常用属性有哪些?

 

控件属性

功能描述

TextView

android:text

设置显示文本

android:textColor

设置文本的颜色

android:textSize

设置文字大小,推荐单位为sp,如android:textSize = “15sp”

android:textStyle

设置文字样式,如bold(粗体),italic(斜体),bolditalic(粗斜体)

android:height

设置文本区域的高度,推荐单位为dp

android:width

设置文本区域的宽度,推荐单位为dp

android:maxLength

设置文本长度,超出不显示,如android:maxLength = “10”

android:password

设置文本以密码形式“.”显示

android:gravity

设置文本位置,如设置成”center”,文本将居中显示

android:phoneNumber

设置以电话号码的方式输入

android:layout_height

设置TextView控件的高度

android:layout_width

设置TextView控件的宽度

 

控件属性

功能描述

Button

android:text

设置显示文本

android:layout_height

设置Button控件的高度

android:layout_width

设置Button控件的宽度

android:layout_weight

设置Button控件的权重

android:onClick

点击此控件时调用的方法

android:drawable

在Button组件上放置图片

· Android的四大组件是什么?它们的作用分别是什么?

答:Activity(界面)为用户提供可视化界面及操作;Service(服务)是一个长期运行在后台的用户组件,适用于开发没有用户界面且长时间在后台运行的应用功能;Content Provider(数据交换/内容提供者)是在不同程序之间实现数据共享;Broadcast Receiver(广播/广播接收者)是监听系统中的广播消息,以实现在不同组件之间的通信。

· Activity的生命周期有几种状态?有几种方法?什么时候调用这些方法?作用是什么?

答:Activity的生命周期分为5种状态,分别是启动状态、运行状态、暂停状态、停止状态和销毁状态。启动状态很短暂,一般当Activity启动之后便会进入运行状态;运行状态时Activity处于屏幕最前端,它是可见、有焦点的,可以与用户进行交互;暂停状态是当Activity在界面上被部分遮挡,且不能与用户进行交互,如锁屏;停止状态是当Activity在界面上被完全遮挡,完全不能被用户看到,当系统内存不足时,很容易被销毁;销毁状态时Activity将被kill,清理出内存。

Activity的生命周期中主要涉及7种方法(事件回调函数),分别是onCreate()、onStart()、onResume、onPause()、onStop()、onDestroy()和onRestart()方法/函数。onCreate()方法是在Activity创建时调用,通常做一些初始化设置;onStart()方法在Activity即将可见时调用;onResume()方法在Activity可以接收用户输入时调用,此时的Activity位于Activity栈的栈顶;onPause()方法在进入暂停状态时被调用,主要用来保存持久数据、关闭动画、释放CPU资源等;onStop()方法在Activity不对用户可见时调用,Activity进入停止状态;onDestroy()方法在Activity销毁时调用;onRestart()方法在Activity从停止状态进入活动状态前调用。

· Activity之间的跳转需要用到(       )组件,根据开启目标组件的方式不同,Intent被分为哪两种类型?简单介绍这两种类型

答:Activity之间的跳转需要用到Intent组件,Intent是一种轻量级的消息传递机制,可以在同一个应用程序内部的不同组件之间传递信息,根据开启目标组件的方式不同,Intent被分为显式启动(意图)和隐式启动(意图)两种类型,显式启动可以通过名称开启指定的目标组件;隐式启动不需要指明需要启动哪一个Activity,而是通过指定action和category等属性信息,由Android系统来决定。

· 对于Android平台提供的5种数据存储方式,简单介绍它们

文件存储

分为内部存储和外部存储,直接使用Android文件系统存储数据,可以存储体积较大的数据;

 

SharePreferences

它是Android提供的用来存储一些简单的配置信息的一种机制,采用了.xml格式将数据存储到设备中,可以存储应用程序的各种配置信息,如用户名、密码等;

 

ContentProvider

主要用于应用程序之间的数据交换,它可以将自己的数据共享给其他应用程序使用;

 

SQLite数据库

Android自带的一个轻量级数据库,支持基本SQL语法,利用很少的内存就有很好的性能,一般使用它作为复杂数据的存储引擎,可以存储用户信息等;

 

网络存储

将数据存储到服务器上,通过网络提供的存储空间来存储、获取数据信息。

 

 

· 【程序改错题、程序填空题】

package com.example.saveqq;  
  
import java.util.HashMap;  
import java.util.Map;  
  
import android.content.Context;  
import android.content.SharedPreferences;  
  
public class SPSaveQQ{  
    // 保存QQ账号和登录密码到data.xml文件中  
    public static boolean saveUserInfo(Context context, String number, String password) {  
        SharedPreferences sp = context.getSharedPreferences("data", Context.MODE_PRIVATE);  
        SharedPreferences.Editor edit = sp.edit();  
        edit.putString("userName", number);  
        edit.putString("pwd", password);  
        edit.commit();  
        return true;  
    }  
    //从data.xml文件中获取存储的QQ账号和密码  
    public static Map<String, String> getUserInfo(Context context) {  
        SharedPreferences sp = context.getSharedPreferences("data", Context.MODE_PRIVATE);  
        String number = sp.getString("userName", null);  
        String password = sp.getString("pwd", null);  
        Map<String, String> userMap = new HashMap<String, String>();  
        userMap.put("number", number);  
        userMap.put("password", password);  
        return userMap;  
    }  
}  

 

· 服务的启动方式有几种?分别是哪几种?

答:两种。分别是startService方式启动和bindService方式启动,通过startService()方法启动服务,服务会长期在后台运行,并且服务的状态与开启者的状态没有关系,即使启动服务的组件已经被销毁,服务也会依旧运行;当一个组件通过bindService()启动服务时,服务会与组件绑定,一个被绑定的服务提供一个客户端与服务器接口,允许组件与服务交互、发送请求、得到结果,多个组件可以绑定一个服务,当调用onUnbind()方法时,这个服务就会被销毁。

· 【程序改错题、程序填空题】

<LinearLayout 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"  
    android:background="@drawable/bg"  
    android:orientation="vertical">  
  
    <EditText  
        android:id="@+id/et_inputpath"  
        android:layout_width="match_parent"  
        android:layout_height="wrap_content"  
        android:text="data/data/com.example.musicplayer/a.mp3" />  
    <LinearLayout  
        android:layout_width="match_parent"  
        android:layout_height="wrap_content"  
        android:layout_marginTop="10dp"  
        android:layout_gravity="center_horizontal"  
        android:gravity="center"  
        android:orientation="horizontal" >  
        <TextView  
             android:id="@+id/tv_play"  
             android:layout_width="0dp"  
             android:layout_height="wrap_content"  
             android:layout_weight="1"  
             android:drawablePadding="3dp"  
             android:drawableTop="@drawable/play"  
             android:gravity="center"  
             android:text="播放" />  
        <TextView  
             android:id="@+id/tv_pause"  
             android:layout_width="0dp"  
             android:layout_height="wrap_content"  
             android:layout_weight="1"  
             android:drawablePadding="3dp"  
             android:drawableTop="@drawable/pause"  
             android:gravity="center"  
             android:text="暂停" />  
    </LinearLayout>  
</LinearLayout>  

· 【程序改错题、程序填空题】

package com.example.readsms;  
  
import java.util.ArrayList;  
import java.util.List;  
  
import android.app.Activity;  
import android.content.ContentResolver;  
import android.database.Cursor;  
import android.net.Uri;  
import android.os.Bundle;  
import android.view.View;  
import android.widget.TextView;  
  
public class MainActivity extends Activity {  
    private TextView tvSms;  
    private TextView tvDes;  
    private String text = "";  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        // TODO Auto-generated method stub  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        tvSms = (TextView) findViewById(R.id.tv_sms);  
        tvDes = (TextView) findViewById(R.id.tv_des);  
    }  
    public void readSMS(View view) {  
        Uri uri = Uri.parse("content://sms/");  
        ContentResolver resolver = getContentResolver();  
        Cursor cursor = resolver.query(uri, new String[]{ "_id", "address",   
                "type", "body","date"}, null, null, null);  
        List<SmsInfo> smsInfos = new ArrayList<SmsInfo>();  
        if(cursor != null && cursor.getCount() >0 ) {  
            tvDes.setVisibility(View.VISIBLE);  
            while(cursor.moveToNext()) {  
                int _id = cursor.getInt(0);  
                String address = cursor.getString(1);  
                int type = cursor.getInt(2);  
                String body = cursor.getString(1);  
                long date = cursor.getLong(4);  
                SmsInfo smsInfo = new SmsInfo(_id, address, type, body, date);  
                smsInfos.add(smsInfo);  
            }  
            cursor.close();  
        }  
        for (int i = 0;i < smsInfos.size(); i++) {  
            text += "手机号码:" + smsInfos.get(i).getAddress() + "\n";  
            text += "短信内容:" + smsInfos.get(i).getBody() + "\n\n";  
            tvSms.setText(text);  
        }  
    }  
      
}  

· 【程序改错题、程序填空题】

<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"  
    android:background="@android:color/white"  
    tools:context=".MainActivity">  
    <ImageView  
        android:id="@+id/iv_flower"  
        android:layout_width="150dp"  
        android:layout_height="267dp"  
        android:layout_centerInParent="true"  
        android:background="@layout/frame"  
        android:layout_marginBottom="20dp" />  
    <Button  
        android:id="@+id/btn_play"  
        android:layout_width="70dp"  
        android:layout_height="70dp"  
        android:layout_centerInParent="true"  
        android:background="@android:drawable/ic_media_play"/>  
</RelativeLayout>  

· 【程序改错题、程序填空题】

package com.example.frame;  
  
import android.app.Activity;  
import android.graphics.drawable.AnimationDrawable;  
import android.os.Bundle;  
import android.view.View;  
import android.widget.Button;  
import android.widget.ImageView;  
  
public class MainActivity extends Activity implements View.OnClickListener{  
    private ImageView iv_flower;  
    private Button btn_start;  
    private AnimationDrawable animation;   
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        iv_flower = (ImageView) findViewById(R.id.iv_flower);  
        btn_start = (Button) findViewById(R.id.btn_play);  
        btn_start.setOnClickListener(this);  
        //拿到AnimationDrawable对象  
         animation = (AnimationDrawable)iv_flower.getBackground();         
    }  
  
    public void onClick(View v) {  
        //播放动画  
        if(!animation.isRunning()){  
            animation.start();  
            btn_start.setBackgroundResource(android.R.drawable.ic_media_pause);  
        }else{  
            animation.stop();  
            btn_start.setBackgroundResource(android.R.drawable.ic_media_play);  
        }  
    }  
}  

· 【程序改错题、程序填空题】

<LinearLayout 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"  
    android:orientation="vertical"  
    tools:context=".MainActivity" >  
  
    <RelativeLayout  
        android:layout_width="match_parent"  
        android:layout_height="wrap_content" >  
  
        <EditText  
            android:id="@+id/et_path"  
            android:layout_width="match_parent"  
            android:layout_height="wrap_content"  
            android:hint="请输入视频文件的路径"  
            android:layout_toLeftOf="@+id/bt_play" />  
  
        <ImageView  
            android:id="@+id/bt_play"  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:layout_alignParentRight="true"  
            android:layout_centerVertical="true"  
            android:src="@android:drawable/ic_media_play" />  
    </RelativeLayout>  
  
    <LinearLayout  
        android:layout_width="wrap_content"  
        android:layout_height="match_parent"  
        android:layout_below="@+id/play" >  
  
        <VideoView  
            android:id="@+id/video_view"  
            android:layout_width="match_parent"  
            android:layout_height="match_parent" />  
    </LinearLayout>  
  
</LinearLayout>  

· 【程序改错题、程序填空题】

package com.example.videoview;  
  
import android.app.Activity;  
import android.media.MediaPlayer;  
import android.os.Bundle;  
import android.view.View;  
import android.widget.EditText;  
import android.widget.ImageView;  
import android.widget.MediaController;  
import android.widget.VideoView;  
public class MainActivity extends Activity implements View.OnClickListener {  
    private EditText et_path;  
    private ImageView bt_play;  
    private VideoView videoView;  
    private MediaController controller;  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        et_path = (EditText) findViewById(R.id.et_path);  
        bt_play = (ImageView) findViewById(R.id.bt_play);  
        videoView = (VideoView) findViewById(R.id.video_view);  
        controller = new MediaController(this);  
        videoView.setMediaController(controller);  
        bt_play.setOnClickListener(this);  
    }  
    @Override  
    public void onClick(View v) {  
        switch (v.getId()) {  
        case R.id.bt_play:  
            play();  
            break;  
        }  
    }  
    private void play() {  
        if (videoView != null && videoView.isPlaying()) {  
            bt_play.setImageResource(android.R.drawable.ic_media_play);  
            videoView.stopPlayback();  
            return;  
        }  
        videoView.setVideoPath(et_path.getText().toString());  
        videoView.start();  
        bt_play.setImageResource(android.R.drawable.ic_media_pause);  
        videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {  
            @Override  
            public void onCompletion(MediaPlayer mp) {  
                // TODO Auto-generated method stub  
                bt_play.setImageResource(android.R.drawable.ic_media_play);  
            }  
        });  
    }  
}  

 

END.

  • 19
    点赞
  • 116
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 很高兴听到你正在进行Android移动应用开发期末大作业。这是一个非常有挑战性的任务,需要你具备扎实的编程技能和创新思维。在开发过程中,你需要考虑用户需求、界面设计、功能实现等方面,同时还要注意代码的可读性和可维护性。希望你能够认真对待这个项目,不断学习和提高自己的技能,最终开发出一个优秀的移动应用。祝你成功! ### 回答2: 这门移动应用开发课程的期末大作业要求我们使用Android平台开发一个完整的移动应用,并且要求从需求分析、UI设计、代码编写到测试上线全部自主完成。在这个过程中,我收获了很多。 首先在需求分析方面,我明白了在开发一款移动应用之前,一定需要先对用户需求进行深入的了解和分析,明确应用的定位和目标用户。只有在掌握了用户的需求和期望后,才能开发出真正实用且符合用户体验的应用。 其次在UI设计方面,我深刻体验到设计对于产品吸引用户和提高用户体验的重要性。一个简洁美观、符合人体工程学的UI设计不仅可以吸引用户使用,也能够让用户使用起来更加顺手,更加舒适。在设计过程中,我学习到了更多的配色搭配技巧和界面设计规范,不仅让我在这份大作业中的UI更加美观,也为我今后的设计工作积累了宝贵的经验。 最后在代码编写和测试过程中,我收获了更多的实践经验。从Java语言基础Android实践技能,我逐渐领会到了应用程序设计的一些基本概念,并且掌握了更多的开发技巧和调试工具。同时,我也学会了怎样在测试环节中进行错误排除和性能优化,将应用的品质提升到更高的层次。 总的来说,这门移动应用开发课程的期末大作业对于我的成长和未来的职业发展都有着非常重要的意义。我相信,在今后的学习和工作生涯中,我一定会更好地应用课程中的知识和技能,不断提升自己的创新和实践能力。 ### 回答3: Android移动应用开发期末大作业是一项很有挑战性的任务,因为它需要我们综合应用所有学到的知识和技能,创建一款功能完善、易于使用、界面美观的应用。 在开始开发应用之前,我们需要先确定应用的主题和目标用户群体。一些常见的应用主题包括:娱乐类、社交类、教育类、商务类等。根据主题和目标用户群体的需求,我们可以选择使用哪些技术和开发工具来实现应用功能,如:UI设计、HTTP请求、数据库管理、音视频播放等。此外,我们还需要考虑应用的性能和可靠性方面的问题,如:内存管理、网络连接不稳定等。 在开发过程中,我们要按照以下步骤进行: 1.需求分析:确定应用的功能需求和用户需求。 2.设计:设计应用的UI界面、交互设计和数据库结构等。 3.编码:按照设计文档进行编程实现。 4.测试:对应用进行测试和回归测试,确保应用功能的正确性和稳定性。 5.发布:将应用上架到各大应用商店,让更多用户使用和下载。 除了以上步骤,我们还需要注重以下方面: 1.考虑应用的用户体验,保证应用的易用性和用户友好性。 2.优化应用的性能,保证应用的流畅度和响应速度。 3.考虑应用的隐私和安全性,保护用户的个人信息和隐私。 总之,Android移动应用开发期末大作业需要我们从多个方面综合应用所学知识和技术,设计和完成一款高质量、用户满意的应用。这不仅是一次学习和实践的机会,也是对我们技术能力和设计能力的考验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值