精华内容
下载资源
问答
  • Android移动应用开发从入门到精通Android移动应用开发从入门到精通Android移动应用开发从入门到精通Android移动应用开发从入门到精通
  • 资源名称:Android移动应用开发 基于Adobe AIR内容简介:《Android移动应用开发:基于AdobeAIR》共四部分19章,主要介绍如何使用AdobeAIR开发Android移动应用,深入讲解Android移动开发特有的各种主题,力图帮助读者...
  • Android移动应用开发课程建设 高职课程建设,android相关专业使用
  • Android移动应用开发实验指导书,设计Android开发环境,Android应用程序,Android生命周期,Android用户界面,组件通信与广播,后台服务,数据存储与访问,位置服务于地图应用,AndroidNDK开发。
  • Android移动应用开发习题答案单元1Android开发环境搭建与模拟器创建1.填空题(1)2008(2)Linux、操作系统(3)应用程序层、应用程序框架层、核心类库、Linux内核(4)JavaC++/C(5)应用框架(6)应用程序(7)模拟器、Android...

    Android

    移动应用开发习题答案

    单元

    1

    Android

    开发环境搭建与模拟器创建

    1

    .填空题

    (

    1

    )

    2008

    (

    2

    )

    Linux

    、操作系统

    (

    3

    )

    应用程序层、应用程序框架层、核心类库、

    Linux

    内核

    (

    4

    )

    Java

    C++/C

    (

    5

    )

    应用框架

    (

    6

    )

    应用程序

    (

    7

    )

    模拟器、

    Android

    模拟器

    (

    8

    )

    IntelliJ IDEA

    Android

    2

    .选择题

    (

    1

    )创建程序的过程中,填写

    Application Name

    表示(

    )

    正确答案:

    A

    (

    2

    )

    Android

    操作系统的手机可以有以下几个方法进行软件安装

    (

    )

    (多选题)

    ABCD

    (

    3

    )

    Android

    操作系统主要的特点是:

    (

    )

    (多选题)

    正确答案:

    ABC

    (

    4

    )以下对

    Android

    操作系统描述正确的是:

    (

    )

    (多选题)

    正确答案:

    ABCD

    (

    5

    )以下哪些是

    Android Stuido

    的优势(

    )

    (多选题)

    正确答案:

    ABCD

    (

    6

    )以下哪些是

    Genymotion

    模拟器的优势(

    )

    (多选题)

    正确答案:

    ABCD

    3

    .简答题

    (

    1

    )

    Android

    的四层架构分别包括哪几层?分别起到什么作用?

    参考答案:

    Linux

    内核层(

    Linux Kernel

    )

    :基于

    Linux

    内核,内核为上层系统提供了系统服务。

    核心类库层(

    Libraries

    )

    :系统库基于

    C/C++

    语言实现,通过接口向应用程序框架层提

    展开全文
  • Android移动应用开发实验指导书.pdf
  • android移动应用开发基础教程PPT,适合教育工作者,上课用。当然,想进行android入门的童鞋也可以下载来看看,适合初学者。
  • android移动应用开发【简易计算器】,大学写的,能够实现简单的计算。
  • Android移动应用开发案例教程课程大纲课程定位Android移动应用项目开发课程是移动应用开发相关专业的核心课程本课程的先修课程包括Android移动应用基础开发C程序设计Java Web应用开发嵌入式操作系统等后续课程是该...
  • Android移动应用开发基于AdobeAIR(布罗西耶著) Android移动应用开发
  • 文件中包含《Android移动应用开发案例教程》电子课件,供Android移动开发者学习使用。
  • Android 移动应用开发模拟题

    千次阅读 2021-01-14 13:12:59
    Android 移动应用开发模拟题 题目 本套题难度偏低,可以作为考前热身题 注: 建议时间包括了(创建项目,加上打开虚拟机的卡顿时间,完成项目的录屏时间,提交代码的时间,出现问题找bug的时间) 注 :关于多线程的题目还是...

    Android 移动应用开发模拟题

    题目

    本套题难度偏低,可以作为考前热身题

    注: 建议时间包括了(创建项目,加上打开虚拟机的卡顿时间,完成项目的录屏时间,提交代码的时间,出现问题找bug的时间)
    注 :关于多线程的题目还是倾向于考定时器这种稍微有点难度的

    链接如下
    安卓编程 多线程与Handler消息传递(附案例 计时器)
    更多详细的题目可以去下面这篇文章看看
    Android编程 移动应用开发 经典习题案例 (附案例 注意点)

    参考代码和结果展示放在文末


    题目1:

    编写APP
    第一个UI 为一个TextView, 展示你的学号和姓名
    第二个UI 为一个Button, 初始的Text 为"0" ,当用户点击它的时候,Button的Text会相应的变成"1",“2”,“3” ,Button上的text代表了Button被点击的次数

    建议用时: 10分钟


    题目2:

    编写APP
    第一个UI 为一个TextView, 展示你的学号和姓名
    第二个UI 为一个TextView, 展示Spinner中选择的信息
    第二个UI 为一个Spinner 它有三个值 “彩券”,“把你揉碎捏成苹果”,“迟迟”,当用户select到Spinner中相应歌曲的名字时,第二个TextView会展示被select到的歌曲名

    建议用时: 10分钟


    题目3:

    编写APP
    第一个UI 为一个TextView, 展示你的学号和姓名
    第二个UI 为一个Button 当用户点击id时候, 会跳出一个AlertDialog

    • 它的标题显示你的名字,它的信息显示你所在的城市,AlertDialog有两个按钮
    • Positive Buuton 名为"Red" ,当点击它时,对话框消失并且TextView的颜色变为红色
    • Negative Button 名为"Black" 当点击它时,对话框消失并且TextView的颜色变为黑色

    建议用时: 10分钟


    题目4:

    编写APP
    第一个UI 为一个TextView, 展示你的学号和姓名
    第二个UI 为一个ListView 通过自定义Adapter的方式展示手机的信息
    图片如下
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    手机信息如下

    品牌 名字 价格 图片
    Apple Apple iPhone XR
    Fully Unlocked,64 GB
    S629.00 iphone_xr_o.jpg
    Huawei Huawei P30 Pro s899.99
     256GB+8GB RAM
    s899.99 p30pro.jpg
    Samsung Samsung Galaxy S10
    Factory Unlocked
    Phone with 128GB
    s899.99 s10plus.jpg

    其中品牌的字体颜色为 黑色(#000)
    名字的字体颜色为默认
    价格的字体颜色为蓝色(#00f)
    ImgView的大小和宽度是120dp
    APP的运行结果和下图类似
    在这里插入图片描述
    建议用时:30分钟

    题目5: SQLite数据库操作

    见这篇文章的 5-1至5-3
    Android编程 期末复习 刷题篇(案例+注意点)

    如果能把5-3 从头到尾敲一遍考试就基本上没问题了

    参考代码

    题目1

    在这里插入图片描述

    1.普通解法

    耗时: 5:24.27

    package com.example.tty_task1;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    public class MainActivity extends AppCompatActivity {
        Button btn;
        TextView tv;
        int count = 0;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            btn = findViewById(R.id.btn);
            tv = findViewById(R.id.tv);
            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    btn.setText(String.valueOf(++count));
                }
            });
        }
    }
    
    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextView
            android:id="@+id/tv"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="名字: Joker-Tong 学号: Weary_PJ" />
    
        <Button
            android:id="@+id/btn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="0" />
    </LinearLayout>
    

    2.多线程解法

    耗时: 6:20.44

    package com.example.tty_task1;
    
    import androidx.annotation.NonNull;
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    public class MainActivity extends AppCompatActivity {
        Button btn;
        TextView tv;
        int count = 0;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            btn = findViewById(R.id.button);
            tv = findViewById(R.id.textView);
            final Handler handler = new Handler(new Handler.Callback() {
                @Override
                public boolean handleMessage(@NonNull Message msg) {
                    if (msg.what == 666) {
                        btn.setText(String.valueOf(++count));
                    }
                    return false;
                }
            });
            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            Message message = new Message();
                            message.what = 666;
                            handler.sendMessage(message);
                        }
                    }).start();
                }
            });
        }
    }
    
    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
    
        <TextView
            android:id="@+id/textView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="名字: Joker-Tong 学号: Weary_PJ" />
    
        <Button
            android:id="@+id/button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="0" />
    </LinearLayout>
    

    题目2

    耗时: 6:30.72
    在这里插入图片描述

    package com.example.tty_task2;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.os.Bundle;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.SimpleAdapter;
    import android.widget.Spinner;
    import android.widget.TextView;
    
    public class MainActivity extends AppCompatActivity {
        TextView tv;
        Spinner spinner;
        String musics[] = new String[]{"彩券", "把你揉碎捏成苹果", "迟迟"};
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            tv = findViewById(R.id.tv);
            spinner = findViewById(R.id.spinner);
            ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, musics);
            spinner.setAdapter(adapter);
            spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                    tv.setText(musics[position]);
                }
    
                @Override
                public void onNothingSelected(AdapterView<?> parent) {
    
                }
            });
        }
    }
    
    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="名字: Joker-Tong 学号: Weary_PJ" />
    
        <TextView
            android:id="@+id/tv"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="薛之谦" />
    
        <Spinner
            android:id="@+id/spinner"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>
    

    题目3

    *耗时: 7:50.24 *
    在这里插入图片描述

    package com.example.tty_task3;
    
    import androidx.appcompat.app.AlertDialog;
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.Manifest;
    import android.content.DialogInterface;
    import android.graphics.Color;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    public class MainActivity extends AppCompatActivity {
        Button btn;
        TextView tv;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            btn = findViewById(R.id.btn);
            tv = findViewById(R.id.tv);
            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    AlertDialog.Builder bl = new AlertDialog.Builder(MainActivity.this);
                    bl.setTitle("Joker-Tong").setMessage("温州").setPositiveButton("Red", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            tv.setTextColor(Color.RED);
                        }
                    }).setNegativeButton("Black", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            tv.setTextColor(Color.BLACK);
                        }
                    }).show();
                }
            });
        }
    }
    
    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextView
            android:id="@+id/tv"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="名字: Joker-Tong 学号: Weary_PJ" />
    
        <Button
            android:id="@+id/btn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="显示对话框" />
    </LinearLayout>
    

    题目4

    耗时: 20:45.96
    在这里插入图片描述

    package com.example.tty_task4;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.os.Bundle;
    import android.widget.ListView;
    
    import java.util.ArrayList;
    
    public class MainActivity extends AppCompatActivity {
        ListView lv;
        ArrayList<Phone> list;
        PhoneAdapter adapter;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            lv = findViewById(R.id.lv);
            list = new ArrayList<>();
            list.add(new Phone(R.drawable.applr, "Apple", "Apple iPhone XR Fully Unlocked,64 GB", "S629.00"));
            list.add(new Phone(R.drawable.huawei, "Huawei", "Huawei P30 Pro s899.99 256GB+8GB RAM", "S899.99"));
            list.add(new Phone(R.drawable.samsung, "Samsung", "Samsung Galaxy S10 Factory Unlocked Phone with 128GB", "S899.99"));
            adapter = new PhoneAdapter(this, list);
            lv.setAdapter(adapter);
        }
    }
    
    
    package com.example.tty_task4;
    
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    import androidx.annotation.NonNull;
    import androidx.annotation.Nullable;
    
    import java.util.ArrayList;
    
    public class PhoneAdapter extends ArrayAdapter<Phone> {
        private Context context;
        private ArrayList<Phone> list;
    
        public PhoneAdapter(@NonNull Context context, ArrayList<Phone> list) {
            super(context, android.R.layout.simple_list_item_1, list);
            this.context = context;
            this.list = list;
        }
    
        @NonNull
        @Override
        public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
            View view = LayoutInflater.from(context).inflate(R.layout.row, null, false);
            TextView grand = view.findViewById(R.id.row_grand);
            TextView name = view.findViewById(R.id.row_name);
            TextView price = view.findViewById(R.id.row_price);
            ImageView img = view.findViewById(R.id.row_img);
            Phone phone = list.get(position);
            grand.setText(phone.getBrand());
            name.setText(phone.getName());
            price.setText(phone.getPrice());
            img.setImageResource(phone.getPicId());
            return view;
        }
    }
    
    
    package com.example.tty_task4;
    
    public class Phone {
        private int picId;
        private String brand;
        private String name;
        private String price;
    
        public int getPicId() {
            return picId;
        }
    
        public void setPicId(int picId) {
            this.picId = picId;
        }
    
        public String getBrand() {
            return brand;
        }
    
        public void setBrand(String brand) {
            this.brand = brand;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getPrice() {
            return price;
        }
    
        public void setPrice(String price) {
            this.price = price;
        }
    
        public Phone(int picId, String brand, String name, String price) {
            this.picId = picId;
            this.brand = brand;
            this.name = name;
            this.price = price;
        }
    }
    
    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:orientation="horizontal" android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center_vertical">
    
        <ImageView
            android:id="@+id/row_img"
            android:layout_width="120dp"
            android:layout_height="120dp"
            app:srcCompat="@drawable/applr" />
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:paddingLeft="15dp">
    
            <TextView
                android:id="@+id/row_grand"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textColor="#000"
                android:textSize="17sp"
                android:text="TextView" />
    
            <TextView
                android:id="@+id/row_name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="TextView" />
    
            <TextView
                android:id="@+id/row_price"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textColor="#00f"
                android:text="TextView" />
        </LinearLayout>
    </LinearLayout>
    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="名字: Joker-Tong 学号: Weary_PJ" />
    
        <ListView
            android:id="@+id/lv"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </LinearLayout>
    
    展开全文
  • PAGE 1 PAGE 1 Android移动应用开发基础教程微课版教学大纲 学 时62 代 码 适用专业 制 定 审 核 批 准 一课程的地位性质和任务 Android移动应用开发基础是普通高等学校计算机科学与技术专业的一门重要的专业基础课...
  • 资源名称:Android移动应用开发(第3版)卷Ⅰ:基础篇内容简介:《Android移动应用开发(第3版)卷Ⅰ:基础篇》涵盖了Android开发从概念、技术到市场推广应用的全部主题,内容包括Android平台概览、Android应用程序设计...
  • Delphi XE8开发iOS和Android移动应用开发教程[完整中文版]
  • 资源名称:Android移动应用开发(第3版)卷Ⅱ:提高篇内容简介: 《Android移动应用开发(第3版)卷Ⅱ:提高篇》涵盖了Android开发从概念、技术到市场推广应用的全部话题,内容包括:高级Android应用程序设计原则,高级...
  • App Inventor零基础Android移动应用开发-浙江大学城市学院
  • 文件中包含《Android移动应用开发案例教程》一书中项目源代码,供初学者参考。
  • DelphiXE8开发iOS和Android移动应用开发教程[真正完整版],完整版电子档。适合新手使用。
  • AppInventor零基础Android移动应用开发-谷歌精品课程-浙江大学城市学院-吴明晖 第1讲 - AppInventor简介\ 第2讲 - 熟悉AI2开发环境\ 第3讲 - 安安诞生记\ 第4讲 - 安安爱画画\ 第5讲 - 安安抓蝴蝶\ 第6讲 - 安安历险...
  • DelphiXE8开发iOS和Android移动应用开发教程[完整中文版].pdf
  • Android移动应用开发》 复习题(一)

    千次阅读 多人点赞 2019-12-08 15:31:12
    Android移动应用开发》 复习题(一) (一)Android的体系结构是怎样的?请简要加以说明。 Android的系统架构采用了分层架构的思想,从上层到底层共包括四层,分别是应用层、应用框架层、系统运行库层以及Linux...

    《Android移动应用开发》

    复习题(一)

    (一)Android的体系结构是怎样的?请简要加以说明。

    Android的系统架构采用了分层架构的思想,从上层到底层共包括四层,分别是应用层、应用框架层、系统运行库层以及Linux内核层。
    应用层:Android平台不仅仅是操作系统,也包含了许多应用程序,譬如SMS短信客户端程序、电话拨号程序、图片浏览器、Web浏览器等应用。这些应用程序都是用Java语言编写的,并且可以被开发人员开发的其他应用程序所替换。
    应用框架层:该层是Android应用开发的基础。应用框架层包括活动管理器、窗口管理器、内容提供者、视图系统、包管理器、电话管理器、资源管理器、位置管理器、通知管理器和XMPP服务十个部分。
    系统运行库层:系统运行库层可以分成两部分,分别是系统库和Android运行时。
    Linux内核层:Android的核心系统服务依赖于Linux内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型。Linux内核也同时作为硬件和软件栈之间的抽象层。

    (二)Android程序结构是怎样的?请简要加以分析。

    解答:如以工程名称Firstdemo作为根目录,将所有自动生成的和非自动生成的文件都保存在这个根目录下。
    (1)src目录:src目录下是java源代码存放目录,里面一般都是.java结尾的java文件。
    (2)gen目录:gen目录是Android开发工具自动生成的文件。目录中有个可自定义的包,包里有两个文件,BuildConfig.java和R.java。BuildConfig.java是Android调试用的。R.java是在建立项目时自动生成的,这个文件是只读模式,不能更改。
    (3)res目录:res目录是资源目录,可以存放应用使用到的各种资源,如XML界面文件、图片、数据等。
    (4)assets目录:assets资源目录一般可用于存放html文件、数据库文件、javascript文件等,还有原始格式的文件,例如二进制格式的音频文件、视频文件等。
    (5)AndroidMamifest.xml
    AndroidMamifest.xml项目清单文件列出了应用程序提供的功能,开发好的各种组件需要在此文件中进行配置,当应用使用到系统内置的应用(如电话服务、互联网服务、短信服务、GPS服务等)还需在此文件中声明使用权限。每个Android程序必须在根目录下包含一个AndroidMamifest.xml文件。

    (三)Activity的四种启动模式是什么?并请加以说明。
    Standard、single Top、single Task、single Instance
    Standard:默认模式,会在启动时创建一个新实例,创建的模式也可以随Intent.FLAG_ACTIVITY_NEW_TASK而改变
    single Top:当启动activity时,有相同的activity在前台与用户交互,那就复用这个activity,这个实例会被调用Activity.onNewIntent()。
    single Task:在启动activity时,若有一个运行着这个activity的task,那这个activity实例会被调到前台,并调用Activity.onNewIntent() ,启动实例的Intent的flag会被设置Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT . singleTask是singleTop的一个扩展集。
    single Instance:开辟一个只允许一个activity实例在里头运行的task. 如果用同样的intent再次启动这个activity,task会被调到前台,其Activity.onNewIntent() 会被调用. 如果这个activity实例要启动一个新activity,那么这个新activity会在一个新task中运行.

    (四)Handler消息传递机制是怎样的?举例加以说明。

    利用Handler消息传递的过程是:使用Handler发送消息,该消息被传送到指定的Message Queue。为了保证正常工作,当前线程必须有Message Queue,而Message Queue 是由Looper 对象来管理的。因此要求当前线程必须有一个Looper对象,根据不同类型的线程,处理情况不同,主要分为以下两类:
    主线程:系统以及为其初始化了Looper对象,因此可以直接创建Handler对象,并由该Handler对象发送,处理消息。
    非主线程:先调用Looper的prepare()方法创建一个Looper对象,然后调用Looper的loop()方法启动它。
    当线程有了Looper对象之后,再创建Handler子类的实例,重写handleMessage()方法处理消息,最后由loop()启动Looper对象。

    (五)如何发送广播?如何接收系统广播消息?
    Android广播分为两个方面:广播发送者和广播接收者。通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器),用于异步接收广播Intent。广播Intent是通过调用Context.sendBroadcast()发送、BroadcastReceiver()接收。广播Intent的发送是通过调用Context.sendBroadcast()、Context.sendOrderedBroadcast()、Context.sendStickyBroadcast()来实现的。通常一个广播Intent可以被订阅了此Intent的多个广播接收者所接收。
    广播接收器只能接收广播,对广播的通知做出反应,很多广播都产生于系统代码,如:时区改变的通知、电池电量不足、用户改变了语言偏好,或者开机启动等。
    广播接收器没有用户界面,但是它可以为它们接收到信息启动一个Activity或者使用NotificationManager来通知用户。

    解答:Android系统中内置了多个系统广播,只要涉及到手机的基本操作,基本上都会发出相应的系统广播。如:开机启动,网络状态改变,拍照,屏幕关闭与开启,点亮不足等等。每个系统广播都具有特定的intent-filter,其中主要包括具体的action,系统广播发出后,将被相应的BroadcastReceiver接收。系统广播在系统内部当特定事件发生时,由系统自动发出。(编程实现略。)

    (六)Service 和 Thread 的区别是什么?为什么使用Service?注意事项是什么?

    Thread是程序执行的最小单元,可以用Thread来执行一些异步操作。而Service是Android的一种机制,当它运行的时候如果是Local Service,那么对应的Service是运行在主进程的main线程中的。如果是Remote Service,那么对应的Service则是运行在独立进程的main线程中。
    Service可以用来处理一些比较复杂的操作,并且不会因为系统内存紧张而被“杀掉”。
    Service不是一个单独的进程,除非单独声明,否则它不会运行在单独的进程中,而是和启动它的程序运行在同一进程中。Service也不是线程,这意味着它将在主线程里运行。

    (七)比较进程内服务与跨进程服务的不同。

    进程内服务:同一个进程下调用的服务, (通常情况下)即在一个应用程序下的服务。
    跨进程服务:通过一个应用程序(客户端)的 Activity 调用另一个应用程序(服务端)的 Service 为跨进程服务。在 Android 中,如果需要在不同进程间实现通信,就需要用到 AIDL 技术去完成。

    (八)Executor、ExecutorService和Executors的区别是什么?

    Executor 是一个简单的标准化接口,用于定义类似于线程的自定义子系统,包括线程池、异步 IO 和轻量级任务框架。根据所使用的具体 Executor 类的不同,可能在新创建的线程中,现有的任务执行线程中,或者调用 execute() 的线程中执行任务,并且可能顺序或并发执行。
    ExecutorService 提供了多个完整的异步任务执行框架。 ExecutorService 管理任务的排队和安排, 并允许受控制的关闭。
    Executors 类提供大多数 Executor 的常见类型和配置的工厂方法, 以及使用它们的几种实用工具方法
    Java 里面线程池的顶级接口是 Executor ,但是严格意义上讲 Executor 并不是一个线程池,而只是一个执行线程的工具。真正的线程池接口是 ExecutorService 。ExecutorService 继承Executor 。Executors 类为创建 ExecutorService 提供了便捷的工厂方法。

    (九)ThreadPoolExecutor和ExecutorService有怎样的关系?ThreadPoolExecutor的构造方法是怎样的?试对ThreadPoolExecutor构造方法的参数加以说明。

    关系:ThreadPoolExecutor是ExecutorSevice的一个实现类, 它使用可能的儿个池线程之一执行每个提交的任务,通常使用Executors工厂方法配置。
    方法:1. 用给定的初始参数和默认的线程工厂及被拒绝的执行处理程序创建新的ThreadPoolExecutor.
    2. 用给定的初始参数和默认的线程工厂创建新的ThreadpoolExecutor.
    3. 用给定的初始参数和默认被拒绝的执行处理程序创建新的ThreadPoolExecutor.
    4. 用给定的初始参数创建新的ThreadPoolExecutor.
    说明:✧corePoolSize: 池中所保存的线程数,包括空闲线程。
    ✧maximumPoolSize: 池中允许的最大线程数。
    ✧keepAliveTime: 当线程数大于核心时,此为终止前多余的空闲线程等待新任务的最长时间。
    ✧unit: keepAliveTime 参数的时间单位。
    ✧workQueue;:执行前用于保持任务的队列。此队列仅保持由execute 方法提交的
    Runnable任务。
    ✧threadFactory;:执行程序创建新线程时使用的工厂,
    ✧Handler: 由于超出线程范围和队列容量而使执行被阻塞时所使用的处理程序。

    (十)为什么说Executors类为创建ExecutorService提供了便捷的工厂方法?

    要配置一个线程池是比较复杂的, 尤其是对于线程池的原理不是很清楚的情况下, 很有可能配置的线程池不是较优的, 因此在 Executors 类里面提供了一些静态工厂, 生成一些常用的线程池。
    ( 1) newCachedThreadPool : 创建一个可缓存的线程池。如果线程池的大小超过了处理任务所需要的线程,那么就会回收部分空闲( 60 秒不执行任务)的线程,当任务数增加时,此线程池又可以智能地添加新线程来处理任务。 此线程池不会对线程池大小做限制, 线程池大小完全依赖于操作系统(或者说 JVM )能够创建的最大线程大小。
    ( 2) newFixedThreadPool : 创建固定大小的线程池。每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小。 线程池的大小一旦达到最大值就会保持不变, 如果某个线程因为执行异常而结束,那么线程池会补充一个新线程。
    ( 3) newSingleThreadExecutor : 创建一个单线程的线程池。这个线程池只有一个线程在工作,也就是相当于单线程串行执行所有任务。 如果这个唯一的线程因为异常结束, 那么会有一个新的线程来替代它。此线程池保证所有任务的执行顺序按照任务的提交顺序执行。
    ( 4) newScheduledThreadPool :创建一个定长线程池, 此线程池支持定时以及周期性执行任务的需求。

    (十一)Java中的强引用、软引用、弱引用的区别是什么?

    强引用:是指创建一个对象并把这个对象赋值给一一个引用变量。 强引用不为null时,它指向的对象水远不会被垃圾回收,即使当内存不足时。当强引用被置为nul时,该对象则被标记为可回收的,但是GC可能依旧没有回收它,这和GC的回收算法有关,同时该对象仍然占着内存。总之,我们不能保证可回收的对象被GC回收。
    软引用:通过SoftReference类来实现。软引用指向的对象,不用置null,也可以被GC回收,对象是否被释放取决于GC算法以及GC运行时可用的内存数量。通俗地讲,内存空间足够,GC就不会回收它;如果内存空间不足了,就会回收这些对象的内存。
    弱引用:通过WeakReference类来创建。GC运行时如果碰到了弱引用对象,不管当前内存空间足够与否,都会回收它的内存,但是也有可能需要GC多次才能发现和释放弱引用的对象。
    软引用和弱引用都可以与引用队列( ReferenceQueue)关联,这样就可以知道软引用或者弱引用是否被回收。

    (十二)什么是观察者模式?观察者模式的使用场景是怎样的?观察者模式的优缺点是什么?试编程加以说明。

    观察者模式就是定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。
    使用场景:
    (1)关联行为场景。需要注意的是,关联行为是可拆分的,而不是“组合”关系。
    (2)事件多级触发场景。
    (3)跨系统的消息交换场景,如消息队列的处理机制。
    优点:观察者和被观察者之间是抽象耦合;建立了一套触发机制。
    缺点:开发和调试比较复杂,而且一个观察者卡壳,会影响整体的执行效率。同时多级触发时的效率让人担忧。

    (十三)什么是装饰模式?装饰模式的使用场景是怎样的?装饰模式的优缺点是什么?试编程加以说明。

    装饰模式就是动态地给一个对象添加一些额外的职责。
    使用场景:
    (1)需要扩展一个类的功能,或给一个类增加附加功能。
    (2)需要动态地给一个对象增加功能,这些功能可以再动态地撤销。
    (3)需要为一批的兄弟类进行改装或加装功能,当然是首选装饰模式。
    优点:
    (1)装饰类和被装饰类可以独立发展,而不会相互耦合。
    (2)装饰模式是继承关系的一个替代方案。
    (3)装饰模式可以动态地扩展一个实现类的功能,这不需要多说,装饰模式的定义就是如此。
    缺点:多层类的装饰太过复杂。

    (十四)循环对象 Looper 的作用是什么?请加以说明。

    用于为一个线程开启一个消息队列(MessageQueue),循环等待其他线程发送消息,当有消息时会唤起线程来处理消息,直到线程结束为止。通常情况下Android中并不会为新线程开启消息循环,不会用到Looper,而主线程除外,系统自动为主线程创建一个Looper对象,并创建消息队列,所以主线程会一直运行, 以处理用户事件,直至退出。
    当需要一个线程时,这个线程要能够循环处理其他线程发来的消息事件,或者需要长期与其他线程进行复杂的交互,这时就需要用到Looper来为线程建立消息队列。
    Looper对象提供了以下几个方法:
    ●prepare(): 用于初始化Looper, prepare( )方法保证每个线程至多只有一个Looper对象。
    ●loop(): 用于开启消息循环,当调用了loop( )方法后,Looper线程就真正地开始工作
    了,它会从消息队列中获取消息并交给对应的Handle对象处理消息。
    ●quit(): 用于结束Looper消息循环。

    (十五)Android客户端程序架构的设计一般应考虑哪些问题?(参考教材P374)

    (1)全局变量的定义和使用及全局数据配置;
    (2)推送的实现;
    (3)对新版本的监听和自动下载更新的实现;
    (4)相对完整的基础工具包和核心工具包(类包);
    (5)对客户端各页面单击率的统计及相应数据分析(对用户行为的分析);
    (6)嵌入广告的实现;
    (7) Android 使用UncaughtExceptionHandler捕获全局异常(线程终止异常处理);
    (8) Android系统账户的实现;(9)整个应用的后台服务;
    (10)流量统计;
    (11)整个应用的缓存实现;
    (12)整个应用的内存管理以及内存泄漏的避免;
    (13)整个应用的广播接收机制;
    (14)整个应用的并发设计模式,等等。

    (十六)如何自定义适配器与ListView控件相绑定?扩展BaseAdapter类需要重写哪些方法?试编程加以说明。
    (P40)

    展开全文
  • Android移动应用开发从入门到精通》涵盖了Android开发从概念、技术到市场推广应用的全部话题,内容包括:Android概览、Android应用程序设计精髓、Android用户界面设计精髓、常用AndroidAPI、更多Android应用程序...

           《Android移动应用开发从入门到精通》涵盖了Android开发从概念、技术到市场推广应用的全部话题,内容包括:Android概览、Android应用程序设计精髓、Android用户界面设计精髓、常用AndroidAPI、更多Android应用程序设计原则、对外发布你的Android应用程序和附录等7个部分。附录还包含了Android开发常用工具(如模拟器、DDMS、调试桥和SQLite等)的使用指南。


           《Android移动应用开发从入门到精通》不仅适合Android应用程序开发人员阅读,还能为QA测试人员提供指导。另外《Android移动应用开发从入门到精通》还可以帮助项目经理更好地管理项目进程和项目团队,帮助市场推广人员更好地把握市场、创造令人瞩目的销售业绩。


           资料地址:http://www.firstxueba.com/thread-295-1-1.html


    展开全文
  • Android移动应用开发》 复习题(二)

    千次阅读 多人点赞 2019-12-08 15:27:29
    Android移动应用开发》 复习题(二) 一、填空 1、Android的系统架构采用了分层架构的思想,从上层到底层共包括四层,分别是应用层、应用框架层、系统运行库层以及Linux内核层。 2、Android的四大组件分别是...
  • Android移动应用开发从入门到精通》涵盖了Android开发从概念、技术到市场推广应用的全部话题,内容包括:Android概览、Android应用程序设计精髓、Android用户界面设计精髓、常用AndroidAPI、更多Android应用程序...
  • Android移动应用开发从入门到精通.pdf
  • Android移动应用开发从入门到精通 作 者: 刘帅旗 编著 出版时间: 2012 出版社:中国铁道出版社 《Android移动应用开发从入门到精通》由浅入深地全面讲解了基于Android系统的软件开发,以Andmid 2.3版本作为...
  • Android移动应用开发知识点(一) Android是由Andy Rubin( 安迪·鲁宾)创建的,后来被Google收购了;最早的版本是:Android 1.1版; 是用来编写Android软件app的,这里面也有很多的一些基础知识。 这里面的第...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,868
精华内容 4,347
关键字:

android移动应用开发