Android 60问60答 (一篇复习整个Android)

news2024/11/25 12:50:38

Android 60问60答 (一篇复习整个Android)

有哪些移动端平台?

厂商开发平台:

  • los

  • 黑莓(blackBerry)

第三方私有平台:第三方开发供移动设备厂商使用

  • WindowsMobile

免费开源平台:

  • Android

  • Symbian

Android中Linux内核的作用

  • 充当用户和设备之间的接口。

  • 管理所用活动内存和资源共享

  • 充当设备上所安装的应用的主机

  • 常由硬件制造商使用,因为它提供一个硬件抽象层,可在硬件发生变化时,确保上层保持不变

Android使用的数据库是?

SQLite,提供可用于所有应用的功能强大的轻量级关系数据库

Android有哪些构建块?

  • 活动:专为一个清晰的目的提供独特的可视化UI

  • 服务:始终在后台,完成特定的任务

  • 内容提供者:存储和检索存储在文件、SQLite、web或任何其他持久化存储位置的数据

  • 广播接收器:相应系统范围内广播通知的应用的组成部分

Android项目的目录结构

  • /src/main/java:项目使用的java源文件

  • /build:编译后生成文件

  • libs:专有库

  • /src/main/resourse:应用资源文件,有

    • Drawable:位图文件或者绘制对象资源类型的xml文件

    • Mipmap:使用于不同启动器图标密度的可会址对象文件

    • Layout:用于定义用户界面布局的XML文件

    • Menu:定义应用菜单的XML文件

    • Raw:需要以原始形式保存的任意文件

    • Values:包括字符串、整数、颜色等简单值的xml文件

小部件的常用属性

属性名称关联方法描述
android:layout_gravity定义如何在布局容器内对齐小部件
android_gravitysetGravity(int)设置对象在容器中的放置
android:layout_weight指定小部件的大小比例。如果不拉伸则设置为0,否则根据权重拉伸

Android颜色表示

AARRGGBB

透明度|红|绿|蓝

ListView小部件的作用

此小部件向用户显示一个列表,它与Java中的列表框组件类似,ListView默认支持垂直滚动。要想使用小部件,如下所示:

<ListView android:id="@id/listview"
    android:layout_width="match_parent"
    android:layoutheight="warp_content"
>
</ListView>

ImageView小部件

用于显示图像,可以从其他资源(例如drawable目录、因特网、内容提供者)加载图像,它根据源图像的大小调整自己的尺寸。要想使用该小部件,如下:

<ImageView android:id="@id/imageview"
    android:layout_width="match_parent"
    android:layoutheight="warp_content"
    android:src="@drawable/map"
>
</IamgeView>

WebView小组件

用于显示网页,使用如下

<WebView android:id="@id/webview"
    android:layout_width="match_parent"
    android:layoutheight="warp_content"
>
</WebView>

要想加载网页需要在Java中调用:

WebView view = (WebView)findViewById(R.id.webview);
view.loadUrl("https://google.com");

Android布局有那些?

表格布局

此布局以行和列的形式排列其子视图。表格航对象创建可容纳小部件的行,表格布局的最大列数取决于用最大列数分割的行。

使用表格布局如下:

<TableLayout xmlns:android=""
    android:layout_height="fill_parent"
    android:layout_height="fill_parent"
    android:stretchColumns="1"
>
    <TableRow>
        <TextView />
        <TextView />
        <TextView />
        <!-- 这里有三个元素,故是三列 -->
    </TableRow>
</TableLayout>

框架布局

以堆栈格式从上往下添加视图,项位置用android:gravity属性设置,布局的大小取决于最大视图的大小。

使用框架布局如下:

<FrameLayout xmlns:android:"略"
    android:layout_height="fill_parent"
    android:layout_height="fill_parent"
>
    <ImageView />
    <ImageView />
    <ImageView />
    <!-- 这里有三个元素,故是三行 -->
</FrameLayout>

使用那个方法来关联活动?

setContentView()方法用于将UI与活动关联,用法如下:

public void onCreate(Bundle saveInstanceState){
    super.onCreate(sabeInstanceState);
    setContentView(R.layout.main);
}

如何注册活动为主活动?

只有在manifest.xml中注册过的活动才能被系统访问,要注册活动如下:

<manifest ...>
    <application ...>
        <activity android:name="..." />
    </application>
</manifest>

activity标签中也可以添加一些属性,比如可以指定某活动为主活动:

<activity android:name=".mainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <categort android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

活动生命周期?

  • 正在运行:活动对于用户是在屏幕上可见的

  • 已暂停:焦点在另一个活动上,但是此活动依然可见

  • 已停止;活动被另一个活动安全覆盖,且现处于后台中。停止的活动也是活动的,其对象依然保留在内存中

活动生命周期方法

  • onResume:此方法在活动开始与用户交互之前调用。当活动位于栈顶且准备好接收用户输入就会调用。

在这里插入图片描述

Intent的作用

意图(intent)是用于激活应用组件(活动、服务和广播接收器)的消息

如何使用显式intent启动活动?

显式Intent指定目标组件的名称以激活组件。

Intent intent = new Intent(MyFirstActivity.this,MySecondActicity.class);
startActivity(intent);

如何使用隐式intent启动活动?

隐式intent用于激活其他应用中的组件,不通过名称指定目标组件。要使得隐式的intent生效,需要为被调用的组件设置intent过滤器,intent-filtermanifest.xml中设置。之后可以使用隐式intent表述action,Android会自动与现有组件的intent过滤器比较,找到合适的组件

Intent intent = new Intent();
intent.setAction("com.anna.chapter6.a6");
intent.addCategory(Intent.CATEGORY_DEAFULT);
startActivity(intent);

如何使用Intent在组件之间传递数据

使用Intent

写入方:

intent.putExtra("name","Nicole")
Intent intent = new Intent(MainActivity.this,OtherActivity.class);
intent.putExtra("name", "Nicole");
intent.putExtra("age", 25);
intent.putExtra("address", "Shenzhen");

读取方:

Intent intent = getIntent();
String nameString = intent.getStringExtra("name");
int age = intent.getIntExtra("age",0);
String addressString = intent.getStringExtra("address");

使用Bundle

写入方:

Intent intent = new Intent(MainActivity.this,OtherActivity.class);
Bundle bundle = new Bundle();
bundle.putString("name", "Ben");
bundle.putInt("age", 28);
bundle.putString("address", "China");
intent.putExtras(bundle); //将bundle传入intent中。

读取方:

Intent intent = getIntent();
Bundle bundle = intent.getExtras();
String nameString = bundle.getString("name");
int age = bundle.getInt("age");
String addressString = bundle.getString("address");

ADB是什么

Android Debug Bridge(ADB)充当开发硬件与设备/仿真器之间的通信媒介

ADB有哪些常用命令?

  • device:生成已连接的设备列表

  • pull:将指定文件从设备复制到计算机

  • push:将指定文件从计算机复制到设备

  • install<path>:在设备上安装应用(指定路径)

Logcat有哪些日志级别?

  • 错误,使用Log.e()记录

  • 警告,使用Log.w()记录

  • 信息,使用Log.i()记录

  • 调试,使用Log.d()记录

  • 详细信息,使用Log.v()记录

内部存储区与外部存储器的概念

设备内部的储存,以文件存储,属于应用私有

外部存储器存放在SD卡,所有应用与用户都可以访问

共享首选项是什么?

共享首选项是轻量级机制,用于存储基本数据类型的键值对,是快速存储默认值、类实例变量、用户界面状态以及用户偏好的理想方式

一个程序的数据库在哪?

/data/data/<package name>/databases

如何以编程的方式创建数据库?

在Android中,可以使用android.database.sqlite.SQLiteDatabase以编程方式创建数据库。SQLiteDatabase类公开各种方法来管理SQLite数据库。

操作数据库的方法有哪些?

  • openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory factory,DatabaseErrorHandler errorHandler)

  • updata(String table,ContentValue values,String whereClause,String[] whereArgs)

  • query(SQLiteDatabase db,String[] columns, String selection, Srtring[] selections,String groupby,String having,String sortOrder)

  • getColumnIndex(String ColumnName) 返回给的列名的基于0的索引,或1

  • getColumnName(int ColumnIndex)

  • excute() 如果不是SELECT、INSERT、DELETE或UPDATE,则执行SQL语句

如何检索受SQL语句影响的行数?

使用excuteUpadataDelete()excuteInsert()方法

如何访问内容提供者公开的数据?

使用android.content.ContentResolver

ContentResolver resolver = getContentResolver();

如何读写内部存储区

写文件

  1. 使用android.content.Context类的openFileOutput()方法打开或创建文件

  2. 使用java.io.FileOutputStream类的write()方法将数据写入文件

  3. 使用java.io.FileOutputStream类的close()方法关闭文件

读文件

  1. 使用android.content.Context类的openFileOutput()方法打开或创建文件

  2. 使用java.io.FileOutputStream类的read()方法从文件读取数据

  3. 使用java.io.FileOutputStream类的close()方法关闭文件

getFIleDir与getDir的作用

  • getFileDir():获取用于保存的内部文件的文件系统目录的绝对路径

  • getDIr(String dirname,int node):在您的内部存储空间创建或打开一个现有目录,接收以下参数:

    • dirname:要检索的文件夹名称

    • mode:文件的创建模式

外部环境Enviroment的有哪些状态?

常量描述
MEDID_MOUNTED已经在加载,可以读写访问
MEDID_REMOVED不存在
MEDID_UNMOUNTED已存在但是没有加载
MEDID_MOUNTED_READ_ONLY已存在但只读

getExternalStorageDirectory(String type):检索外部存储目录

getExternalStorageState():检索外部存储设备当前的状态,返回Environment中的某个常量

如何读写外部设备

需要使用getExternalStorageDirectory方法获取到外部存储的路径,然后读写过程与内部存储的读写方式相同

⚠️:写入之前需要在manifest文件中指定所需的权限

<user-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
</user-permission>

如何检索公共首选项

需要使用SharedPerferences接口提供的方法

  • contains(String key):检查首选项是否包含特定首选项,参数指定要检查的key

  • getXXX(String key,XXX defValue):它从首选项中检索指定数据类型的值

如何获取网络权限

<user-permission android:name="android.permission.INTERNET">
</user-permission>

如何启动一个服务

可以使用startService)方法从引用组建启动服务

Intent intent = new Intent(this,myService.class);
startService(intent);

启动的服务与绑定的服务的区别

启动的服务

启动的服务生命周期如下:
onCreate()—>onStartCommand()onStart()方法已过时) —> onDestory()

特点

一旦服务开启跟调用者(开启者)就没有任何关系了。
开启者退出了,开启者挂了,服务还在后台长期的运行。
开启者不能调用服务里面的方法。

绑定的服务

绑定的服务生命周期如下:

onCreate() —>onBind()—>onunbind()—>onDestory()

注意:绑定服务不会调用onstart()或者onstartcommand()方法

特点

bind的方式开启服务,绑定服务,调用者挂了,服务也会跟着挂掉。
绑定者可以调用服务里面的方法。

什么是广播接收器?

广播以intent的形式传达。要接收和响应广播,应用要包括一个称为广播接收器的组件。广播接收器不提供UI。不过,它可以创建状态栏通知,以在收到播时向用户发出提示

创建广播接收器要调用哪个方法?

  • 创建一个类来拓展BroadcastReceiver类

  • 在这个派生类中重写onReceive()方法

如何注册广播接收器?

以下两种方法都可以:

在订单文件中配置

<application ...>
    <receiver android:name="./myReceiver">
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
    </receiver>
    <user-permission android:name="android.permisson.ACCESSS_NETWORK_STATE" />
</application>

以动态的方式

使用与主应用线程中的过滤器匹配的广播intent调用registerReceiver方法,这个方法的签名是:public abstract Intent registerReceiver(BroadcastReceiver reveiver, IntentFilter filter)

创建一个菜单资源要用哪些元素?

  • <menu>:菜单资源的根结点

  • <item>:用于创建菜单项

  • <group>:是一个可选元素,允许对菜单项进行分类,从而允许共享属性

创建菜单要使用哪两个方法?

  • 要重写onCreateIotinsMenu()方法

  • 在这个方法中创建android.view.MenuInflator类的expand方法来拓展菜单

ViewPage是什么?

可以使用AndroidX的ViewPage小部件创建滑动视窗

如何将主题引用到整个引用?

在manifest中将android:thene属性添加到application标签

自定义控件要拓展哪个类?

View

setGravity怎么使用?

可以使用setGravity(gavity,xOffset,yOffset)方法将非常灵活地将消息条放在屏幕的任何位置

Toast toast = Toast,makeText(...);
toast.setGravity(Gravity.BOTTOM|Gravity.LEFT,0,0);
toast.show();

设置闹铃到几种方法的区别?

  • set:设置闹铃

  • setRepeating:设置重复闹铃

  • setInexactRepeating:按照定义的时间间隔重复闹铃,但如果设备处于休眠状态则不会唤醒,这样更省电,即不准确的重复闹铃。

常见的定位技术有哪四种?

  • GPS

  • WiFi定位

  • IP地址定位

  • 三角测量法

如何侦听传入的SMS

Bundle bundle = intent.getExtras();
if(buddle!=null){
    Object[] pdus = (Object[]) bundle.get("pdus);
    SmsMessage[] messages = new SmsMessage[pdus.length];
    for(int i=0;i<pdus.length;i++){
        messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i])
    }
}

如何监听电话状态?

String nameService = Content.TELEPHONE_SERVICE;
TelephonyManager teleManager = (TelephoneManager)getSystemService(nameService);

Canvas与Paint的区别

Canvas(画布)表示可以绘制图形和图像的表面。提供了多种方法来绘制简单的图形、路径、位图和文本。

Paint(画笔)提供绘制富豪、文本和图形的样式和颜色的相关信息。

如何画一个圆?

cavas.onDraw(){
    // drawCircle(float cx,float cy,float radius,Paint paint);
    cavas.drawCircle(50,50,30,paint);
}

MediaPlayer的getCurrentPosition与setOnPerparedListener方法的作用

  • getCurrentPosition():返回当前播放的位置,单位毫秒

  • setOnPerparedListener(MediaPlayer.onPerparedListener listener):注册一个回调函数,当媒体源准备好播放时,可调用该函数

在哪里声明权限?

AndroidManifest.xml

如何运行时申请权限?

调用checkSelfPermisson(String perm)来检查权限,以保证用户没有把权限撤销

使用requestPermissions(String permissions,int requestCode)来请求权限,参数一是请求的权限,参数二随便给一个数字

Android打包成什么?

.APK

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/666934.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信小程序克隆到运行

1.git克隆 2.安装依赖 npm i 如果遇到卡在node lib/install.js 一直不进行 重新运行安装&#xff1a;(https://www.python100.com/html/3716RLP8FZM2.html) npm install --ignore-scripts理解npm install --ignore-scripts 3.安装完运行 npm run serve如果报错&#xff1a; …

基于改进多目标粒子群算法的配电网储能选址定容——附Matlab代码

目录 摘要&#xff1a; 主要内容&#xff1a; 程序思路&#xff1a; 储能选址定容优化模型&#xff1a; &#xff08;1&#xff09;节点电压波动&#xff1a; &#xff08;2&#xff09;负荷波动&#xff1a; &#xff08;3&#xff09;储能系统容量&#xff1a; 改进的…

2023年最好用的办公AI工具,让你工作效率提升10倍!

2023年是AI工具大爆发的一年&#xff0c;在效率办公领域&#xff0c;同样涌现出了很多优秀的AI办公工具&#xff0c;小编亲测了几款&#xff0c;都是宝藏好用的App&#xff0c;以下排名不分先后&#xff0c;一起来看看吧&#xff01; AI办公工具哪个好 GitMindNotion AI酷表C…

智能优化算法之黏菌优化算法(SMA),附matlab代码

黏菌算法是2020年提出的一种智能优化算反&#xff0c;主要模拟的是自然界中多头绒泡菌在不同食物浓度下的觅食行为以及状态变化。黏菌主要分泌酶来消化食物&#xff0c;黏菌的前端延伸成扇形&#xff0c;后端由相互连接的静脉网络包围。环境中不同浓度的食物影响着黏菌静脉网络…

C语言数据在内存中存储---整型提升练习

前言&#xff1a;学习了C语言中的整型提升&#xff0c;总是感觉听的时候很明白&#xff0c;但当自己做题的时候&#xff0c;又总是遗漏了哪一步。自己的感悟&#xff1a;整型提升步骤以及原理都一样&#xff0c;就是把步骤记清楚一步一步的来就行。因此通过下面的一道题来每日复…

【正点原子STM32连载】第三十七章 485实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html# 第三…

【Java.SE】数组的定义与使用

作者简介&#xff1a; 辭七七&#xff0c;目前大一&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a;Java.SE&#xff0c;本专栏主要讲解运算符&#xff0c;程序逻辑控制&#xff0c;方法的使用&…

【机器学习】十大算法之一 “随机森林”

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

Error in `taosdump‘: malloc(): memory corruption: 0x0

在使用taostools的taosdump导出数据时&#xff0c;遇到如下问题&#xff1a; 解决步骤如下&#xff1a; 先看导出目录下的内存是否足够&#xff0c;不够的话&#xff0c;换其他目录导出如果在内存充足的情况下&#xff0c;出现上述问题那么可能是taostools版本不对&#xff0…

Agilent8564EC频谱分析仪

安捷伦8564EC频谱分析仪13145876435 8564EC 是安捷伦的 40 GHz 频谱分析仪。频谱分析仪测量已知和未知信号的频谱功率。频谱分析仪收集信息&#xff0c;例如输入信号与其频率相比的幅度。作为频率分析仪&#xff0c;频谱分析仪的主要用途是记录和分析电输入信号以及其他信号的频…

OWASP之CSRF跨站请求伪造

CSRF&#xff08;Cross-site request forgery&#xff09;跨站请求伪造 文章目录 一、CSRF定义二、CSRF危害三、CSRF漏洞构成1.漏洞风险存在2.用户登录受信任网站A&#xff0c;并在本地生成Cookie3.攻击者伪装数据操作请求的恶意链接或者页面4.诱使未登出用户主动访问或登录恶…

新式茶饮头部品牌「古茗茶饮」联手企企通,打造采购数字化新思路

导读 企企通在采购与供应链领域积累了丰富的项目开发经验&#xff0c;是国内一站式采购数字化管理平台领军企业之一&#xff0c;其售前、商务、项目人员都是这个赛道最专业的。该平台的建设可以自动化处理采购链路多个节点重复性任务&#xff0c;帮助我们提高采购效率&#xf…

向日葵× 实在RPA擦出AI的火花,贝锐与实在智能官宣战略合作

6月19日&#xff0c;实在智能&#xff08;Intelligence Indeed&#xff09;与贝锐&#xff08;Oray&#xff09;正式宣布达成战略合作。实在智能作为国内AI准独角兽企业和超级自动化平台提供商&#xff0c;与国内领先的SaaS远程连接解决方案提供商贝锐的实力“牵手”&#xff0…

基于Python的电影票房爬取与可视化系统的设计与实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

2023年blender渲染显卡推荐

Blender是完全免费的、开源的&#xff0c;而且非常灵活。为了让 Blender 运行良好&#xff0c;有必要找到最好的 GPU。对于希望优化其 3D 建模和渲染体验的 Blender 专业人士和爱好者来说&#xff0c;找到最好的 GPU 是当务之急。GPU 不仅在渲染方面起着至关重要的作用&#xf…

电流驱动和电压驱动有什么区别(高精度电流源)

电流驱动和电压驱动是电子电路设计中常用的两种驱动方式。它们有着各自不同的优缺点&#xff0c;选择不同的驱动方式可以在不同的应用场景中获得更好的效果。 电压驱动&#xff08;Voltage Drive&#xff09;是通过控制电路的输出电压来实现对电路的控制。在电路中&#xff0c;…

软考高级系统架构设计师(四) 计算机网络1

目录 概要 TCP/IP TCP可靠传输的实现&#xff0c;依赖如下机制 ​DNS DHCP 网络规划与设计 逻辑网络设计 物理网络设计 层次化网络设计 网络冗余设计 ​网络存储技术 概要 TCP/IP POP3:邮件收取 SMTP:简单邮件传输协议 DNS:域名与IP地址之间是一对应的 DHCP:主要…

排序算法第一辑——插入排序

思维导图&#xff1a; 一&#xff0c;插入排序 插入排序&#xff0c;一种简单排序中的王者。这种排序算法的过程可以想象成是打牌时摸牌按照顺序插入扑克牌的过程。想想你是如何打牌的&#xff1f;在你拿下一个牌插入时你是不是将手里已经有的牌变得有序了才抽下下一个牌来进行…

电影APP项目(Android+Java+MySQL)

目录&#xff1a; 一、系统架构&#xff1a;二、效果图&#xff1a;1.主页&#xff1a;2.榜单页&#xff1a;3.预告片页&#xff1a;4.动态评论页&#xff1a;5.登录页&#xff1a; 三、数据库设计&#xff1a;四、详细设计&#xff1a;1.主页&#xff1a;2.榜单页&#xff1a;…

【Java-SpringBoot+Vue+MySql】Day2-第一个SpringBoot项目应用

目录 一、初步了解SpringBoot 二、创建第一个SpringBoot项目 三、配置MyBatis数据源 四、创建启动类 五、MVC设计模式 六、SpringBoot整合应用 &#xff08;1&#xff09;创建一个实体类 &#xff08;2&#xff09;创建DAO接口 &#xff08;3&#xff09;创建mapper&#…