当前位置: 首页 > article >正文

GDPU Android移动应用 期末习题集 一天速成(更新ing)

“就这两页ppt,你还背不了吗”

“。。。”

打开ppt后

“Sorry咯,还真背不了😜”

选课建议

vr估计跟游戏开发差不多,学一下简单的编辑器吧。

然后个人觉得小程序性价比高,理由作业相对少,可以更多的时间学想学的。接着听往届说,是没有笔试的即不用背题,每周的作业部分还会给出,类似的应该也经历过,而且还能在某博客白嫖,何乐而不为。

一些设计类课程每周都要一定数量的图,兼顾生产与制作,最主要的是,借鉴还不方便。还有一些不知要经历多久的大作业,大家别忘了跟教程学也是要时长的。

综上,在水课面前取出的度量衡。

程序填空

网上摘选的大题也挺合适的,太难的帮大家过滤掉了,大家可以看一下。 

✨xml部分是布局与控件

记住一些常用的属性

<TextView

        android:id="@+id/textView"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:gravity="center"

        android:textColor="#00ff00"

        android:textSize="24sp"

        android:text="This is TextView"/>

✨intent传递数据

button1.setOnClickListener{            

val data = "This is MainActivity"            

val intent = Intent("com.example.yourpackagename.ACTION_START")  

 intent.putExtra("extra_data", data)            //记准单词

startActivity(intent)        

}

val extraData = intent.getStringExtra("extra_data")//接收数据,获取的时候别忘了加上所属类型,获取的是属性名

✨SharedPreferences与sqlite的读写

✨发送标准广播

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_main)//加载布局

        button.setOnClickListener {

            val intent = Intent("com.example.broadcasttest.MY_BROADCAST")

            intent.setPackage(packageName)

            sendBroadcast(intent)

        }

    }    

}

✨对BroadcastReceiver中设定android:priority属性来确定优先级

<receiver

            android:name=".MyBroadcastReceiver"

            android:enabled="true"

            android:exported="true">

            <intent-filter android:priority=“100”>

                <action android:name="com.example.broadcasttest.MY_BROADCAST"/>

            </intent-filter>

</receiver>

✨读取系统联系人

class MainActivity : AppCompatActivity() {

    private val contactsList = ArrayList<String>()

    private lateinit var adapter: ArrayAdapter<String>

    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)

        // 设置界面的布局

        setContentView(R.layout.activity_main)

        adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, contactsList)

        contactsView.adapter = adapter

        readContacts()

    }

    private fun readContacts() {

        //查询联系人数据

        contentResolver.query(

        ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null, null,null)?.apply {

            // 使用游标遍历查询结果

            while (moveToNext()) {

              val displayName = getString(getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME))

              val number = getString(getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))

                contactsList.add("$displayName\n$number")

            }

            adapter.notifyDataSetChanged()

            close()

        }

    }

}

✨创建通知渠道

val channel = NotificationChannel(Channel_ID, name, importance)

val manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager

manager.createNotificationChannel(channel)

✨调用摄像头拍照

outputImage = File(externalCacheDir, "output_image.jpg")

imageUri = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { FileProvider.getUriForFile(this, "com.example.cameraalbumtest.fileprovider", outputImage)

} else {

Uri.fromFile(outputImage)

}

startActivityForResult(intent, takephoto)

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {

super.onActivityResult(requestCode, resultCode, data)

when (requestCode) { 

takephoto-> { // 填写与启动相机时相同的请求码

if (resultCode == Activity.RESULT_OK) { // 使用返回的图片 Uri 加载图片并显示

val bitmap = BitmapFactory.decodeStream(contentResolver.openInputStream(imageUri)) imageView.setImageBitmap(bitmap) // 填写显示图片的 ImageView }

} } }

✨从相册中选择图片

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {

val intent = Intent(Intent.ACTION_OPEN_DOCUMENT) intent.addCategory(Intent.CATEGORY_OPENABLE)

intent.type = "image/*" // 设置过滤类型为图片

startActivityForResult(intent, fromAlbum) // 填写请求码变量,这里不用背,看准定义的请求码

}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) // 处理相册返回结果

when (requestCode) {

fromAlbum -> {

 if (resultCode == Activity.RESULT_OK && data != null) { // 获取图片的 Uri

data.data?.let { uri -> // 从 Uri 获取图片路径,看准是uri不是url

val bitmap = getBitmapFromUri(uri) 

imageView.setImageBitmap(bitmap) // 将获取到的 Bitmap 设置为 ImageView 的图像 

} } } } } // 从 Uri 获取图片路径 

private val getContent = registerForActivityResult(ActivityResultContracts.GetContent()) {

uri: Uri? -> 

 if (uri != null) { 

var bitmap = getBitmapFromUri(uri) 

binding.imageView.setImageBitmap(bitmap)//也可能整句都写

} }

binding.fromAlbumBtn.setOnClickListener {

getContent.launch("image/*") // 指定MIME类型为图片

}

✨WebView的用法

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_main)

webView = findViewById(R.id.webView)

webView.settings.setJavaScriptEnabled(true)

webView.webViewClient = WebViewClient()

webView.loadUrl("https://www.baidu.com")

}

}

✨HttpURLConnection

private fun sendRequestWithHttpURLConnection() {

//开启线程发起网络请求

thread {

var connection: HttpURLConnection? = null

try {

val response = StringBuilder()

val url = URL("https://bing.com")

connection = url.openConnection() as HttpURLConnection

connection.connectTimeout = 8000

connection.readTimeout = 8000

val input = connection.inputStream

val reader = BufferedReader(InputStreamReader(input))

reader.use {

reader.forEachLine {

response.append(it)

}

}

showResponse(response.toString())

} catch (e: Exception) {

e.printStackTrace()

} finally {

connection?.disconnect()

}

}

}

✨OkHttp

private fun sendRequestWithOkHttp(urlString: String, parseCode: Int) {

//开启线程发起网络请求

thread {

val client = OkHttpClient()

try {

val request = Request.Builder()

.url(urlString)

.build()

val response = client.newCall(request).execute()

val responseData = response.body?.string()

if (responseData != null) {

when (parseCode) {

0 -> showResponse(responseData)

1 -> parseXMLWithPull(responseData)

2 -> parseXMLwithSAX(responseData)

3 -> parseJSONWithJSONObject(responseData)

4 -> parseJSONWithGSON(responseData)

}

}

} catch (e: Exception) {

e.printStackTrace()

}

}

}

✨Pull解析

private fun parseXMLWithPull(xmlData: String) {

try {

val factory = XmlPullParserFactory.newInstance()

val xmlPullParser = factory.newPullParser()

xmlPullParser.setInput(StringReader(xmlData))

var eventType = xmlPullParser.eventType

var id = ""

var name = ""

var version = ""

while (eventType != XmlPullParser.END_DOCUMENT) {

val nodeName = xmlPullParser.name

when (eventType) {

XmlPullParser.START_TAG -> {

when (nodeName) {

"id" -> id = xmlPullParser.nextText()

"name" -> name = xmlPullParser.nextText()

"version" -> version = xmlPullParser.nextText()

}

}

XmlPullParser.END_TAG -> {

if ("app" == nodeName) {

Log.d(TAG, "id is $id")

Log.d(TAG, "name is $name")

Log.d(TAG, "version is $version")

}

}

}

eventType = xmlPullParser.next()

}

} catch (e: Exception) {

e.printStackTrace()

}

}

✨JSONObject解析

private fun parseJSONWithJSONObject(jsonData: String) {

try {

val jsonArray = JSONArray(jsonData)

for (i in 0 until jsonArray.length()) {

val jsonObject = jsonArray.getJSONObject(i)

val id = jsonObject.getString("id")

val name = jsonObject.getString("name")

val version = jsonObject.getString("version")

Log.d("MainActivity", "id is $id")

Log.d("MainActivity", "name is $name")

Log.d("MainActivity", "version is $version")

}

} catch (e: Exception) {

e.printStackTrace()

}

}

✨使用GSON解析

private fun parseJSONWithGSON(jsonData: String) {

val gson = Gson()

val typeOf = object : TypeToken<List<App>>() {}.type

val appList = gson.fromJson<List<App>>(jsonData, typeOf)

for (app in appList) {

Log.d("MainActivity", "id is ${app.id}")

Log.d("MainActivity", "name is ${app.name}")

Log.d("MainActivity", "version is ${app.version}")

}

}

ppt摘选

欢迎来到重量级别的重点,一个大勾注意全背了。

Android四大组件是Activity(活动)、Service(后台任务)、BroadcastReceiver(广播接收)、ContentProvider(数据共享)。

Android系统架构有Linux内核层、系统运行库层、应用框架层、应用层。

分析app模块

java: java目录是放置我们所有Java代码的地方。

res: 项目中使用到的所有图片、布局、字符串等资源都存放在这个目录下。

AndroidManifest.xml: 这是整个Android项目的配置文件。

build.gradle: 这是app模块的gradle构建脚本。

Log.d(): 用于打印一些调试信息。

Activity是一种可以包含用户界面的组件,主要用于和用户进行交互。

Toast将一些短小的信息通知给用户。

Toast.makeText(this, "...",...).show()

创建和显示菜单需要重写 onCreateOptionsMenu()方法。

Intent 是一种用于在应用程序内部或不同应用程序之间传递消息的机制。

可以用于启动Activity,service,broadcast receiver

有显式和隐式Intent。

显式指定要启动的组件的名称。

隐式指定要执行操作和数据类型,然后系统会查找可以处理该操作和数据类型的组件,并启动它们。

Activity的生命周期

onCreate() 这个方法在Activity第一次被创建的时候调用。

onStart() 这个方法在Activity由不可见变为可见的时候调用。

onResume() 这个方法在Activity准备好和用户进行交互的时候调用。

onPause() 这个方法在系统准备去启动或者恢复另一个Activity的时候调用。

onStop() 这个方法在Activity完全不可见的时候调用。

onDestroy() 这个方法在Activity被销毁之前调用。

onRestart() 这个方法在Activity由停止状态变为运行状态之前调用,也就是Activity被重新启动了。

完整生存期(entire lifetime):onCreate() 和 onDestroy() 之前所经历的即为完整生存期

可见生存期(visible lifetime):onStart() 和 onStop() 之间所经历的即为可见生存期

前台生存期(foreground lifetime):onResume() 和 onPause() 之间所经历的就是前台生存期。

onCreate方法中适合编写什么功能的代码?为什么?

(1).初始化应用的界面(如调用setContentView())。

初始化数据(如设置视图控件的初始状态)。

启动任何需要的服务或线程、加载布局、绑定事件等。

(2).onCreate()是 Activity生命周期中的第一个回调方法,它在 Activity 第一次被创建时调用,因此适合进行初始化工作。

一个Activity启动到可以跟用户交互顺序调用哪些回调方法?在什么时候可见?

(1)onCreate()、onStart()、onResume()

(2)在onStart()时,Activity对用户是可见的,但尚未与用户交互。在

onResume()时,Activity已经完全可见并且可以与用户交互。

Activity的启动模式

Standard:默认模式,每次启动都会创建一个新实例。

SingleTop:如果目标 Activity 已经在栈顶,则复用实例。

SingleTask:在任务栈中只有一个实例,如果已经存在,清除栈中其他实例。

SingleInstance:启用一个新的返回栈来管理这个活动

基本的控件:TextView、Button、EditText、RecyclerView

种基本布局

LinearLayout又称作线性布局,这个布局会将它所包含的控件在线性方向上依次排列。

RelativeLayout又称作相对布局,它可以通过相对定位的方式让控件出现在布局的任何位置。

FrameLayout又称作帧布局,这种布局没有丰富的定位方式,所有的控件都会默认摆放在布局的左上角。

ConstraintLayout又称作约束布局可以通过设置视图的约束来定义子视图相对位置,适合复杂的布局需求

GridLayout又称作网格布局将子视图放置在网格中,按行和列进行排列适用于表格、按钮网格等场景。

RecyclerView用来代替ListView和GridView,并且能够实现瀑布流的布局,更高效灵活,提供更为高效的回收复用机制,同时实现管理与视图的解耦合。

RecyclerView使用的基本步骤:(其中的每一步代码看几遍)

1.添加RecyclerView依赖库

2.在布局文件中添加RecyclerView控件

3.定义实体类和子项布局

4.创建一个Adapter类

5.创建一个ViewHolder类

6.创建一个LayoutManager类并设置给RecyclerView

7.将Adapter设置给RecyclerView

Fragment是一种可以嵌入在Activity当中的UI片段,它能让程序更加合理和充分地利用大屏幕的空间,包含布局生命周期

动态添加Fragment的步骤

1.创建待添加Fragment的实例。

2.获取FragmentManager,在Activity中可以直接调用getSupportFragmentManager()方法获取。

3.开启一个事务,通过调用beginTransaction()方法开启。

4.向容器内添加或替换Fragment,一般使用replace()方法实现,需要传入容器的id和待添加的Fragment实例。

5.提交事务,调用commit()方法来完成。

Fragment在生命周期中的状态有运行状态、暂停状态、停止状态、销毁状态。

Fragment的生命周期

onAttach() 当Fragment和Activity建立关联时调用。

onCreateView() 为Fragment创建视图(加载布局)时调用。

onActivityCreated() 确保与Fragment相关联的Activity已经创建完毕时调用。

onDestroyView() 当与Fragment关联的视图被移除时调用。

onDetach() 当Fragment和Activity解除关联时调用。

Android常见的限定符

Android中的广播主要可以分为两种类型:标准广播和有序广播

标准广播是一种异步执行的广播,在广播发出之后,所有的接收者几乎同时接收到广播,没有执行顺序。有序广播是一种同步执行的广播,在广播发出之后,同一时刻只会有一个接收者能够收到这条广播消息,当这个接收者执行完毕后,广播才会继续传递。标准广播效率高但无法截断,有序广播相反。

注册BroadcastReceiver的方式一般有两种:在代码中注册和在AndroidManifest.xml中注册。其中前者也被称为动态注册,后者也被称为静态注册。

动态注册监听时间变化,静态注册实现开机启动。动态注册接收广播时间是短接收广播的优先级高。静态注册接收广播时间长,但是优先级低。

Android系统中主要提供了3种方式用于简单地实现数据持久化功能:文件存储,SharedPreferences存储,数据库存储。

文件存储是不对存储的内容进行任何格式化处理,所有数据都是原封不动地保存到文件当中的,因而它比较适合存储一些简单的文本数据或二进制数据,也适用于存储大型文件,如图片、视频等。

文件存储方式的数据写入文件代码的步骤:

1. 获取应用程序的上下文Context对象。

2. 调用Context对象的openFileOutput()方法创建一个FileOutputStream对象。

3. 通过FileOutputStream对象将数据写入文件中。

4. 关闭FileOutputStreamOutputStreamWriterBufferedWriter对象。

文件存储方式的数据读取文件代码的步骤: (写入步骤的Out改为In,Writer改为Reader,写入改为读取即可)

SharedPreferences是使用键值对的方式来存储数据的。SharedPreferences还支持多种不同的数据类型存储提供了String,SetIntLongFloatBoolean六种数据类型。

SharedPreferences对象存储数据主要可以分为4步实现。

1.获取一个SharedPreferences,并获取Editor对象:调用SharedPreferences对象的edit()方法。

2.添加数据:比如添加一个布尔型数据就使用putBoolean()方法,添加一个字符串则使用putString()方法,以此类推。

3.提交:调用apply()方法将添加的数据提交,从而完成数据存储操作。

4.读取过程:获取一个SharedPreferences对象,读取数据。

SQLite是一款轻量级的关系型数据库,它的运算速度非常快,占用资源很少,不仅支持标准的SQL语法,还遵循了数据库的ACID事务,特别适合在移动设备上使用。

getReadableDatabase() 返回一个只读的数据库实例,用于查询操作。getWritableDatabase() 返回一个可写的数据库实例,用于执行写操作。

构建的SQLiteOpenHelper的实例,只有在调用了getReadableDatabase()或getWritableDatabase()方法,才会真正的创建或打开。

onCreate():在数据库第一次创建时调用,通常用于创建数据库表、插入初始数据等。onUpgrade():在数据库版本升级时调用。

SQLiteOpenHelper升级数据库的基本流程如下:

1. SQLiteOpenHelper的子类中重写onUpgrade方法。

2. onUpgrade方法中,先判断旧版本号和新版本号是否相同,如果相同则不执行任何操作,否则执行升级操作。

3. 在升级操作中,先备份旧表,然后创建新表,最后将旧表数据导入新表中。

ContentValues 是一个类似于字典(Map)的对象,它使用键值对来存储数据,是一个用于存储数据库表中一行数据的容器类。

query的几个参数

public Cursor query(

    String table,                // 1. 表名

    String[] columns,            // 2. 查询的列

    String selection,            // 3. WHERE 子句

    String[] selectionArgs,      // 4. WHERE 子句的参数

    String groupBy,              // 5. GROUP BY 子句

    String having,               // 6. HAVING 子句

    String orderBy               // 7. ORDER BY 子句

)

query()方法返回一个Cursor对象,查询到的所有数据都将从这个对象中取出。Cursor是一个接口,它提供了访问数据库查询结果的方法。

ContentProvider(内容提供者)是 Android 的四大组件之一。 ContentProvider主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问数据的安全性。

在Android 6.0系统中新增了运行时权限功能。

ContentResolver是数据请求者,应用通过它向ContentProvider请求数据或操作数据。

基本形式:

content://<authority>.provider/<path>

内容URI最标准的格式如下:

content://com.example.app.provider/table1

内容URI的两种格式

以路径结尾的标识期望访问该表中的所有数据

content://com.example.app.provider/table1

id结尾表示期望访问该表中拥有相应id的数据

content://com.example.app.provider/table1/1

内容URI的两种通配符

* 表示匹配任意长度的任意字符

# 表示匹配任意长度的数字

MIME 类型是一种标准化的字符串,用于描述数据的格式和内容。

getType()方法是所有的ContentProvider都必须提供的一个方法,用于获取Uri对象所对应的MIME类型。

一个内容URI所对应的MIME字符串主要由3部分组成,Android对这3个部分做了如下格式规定。

1.必须以vnd开头。

2.如果内容URI以路径结尾,则后接android.cursor.dir/;如果内容URIid结尾,则后接

android.cursor.item/

3.最后接上vnd.<authority>.<path>

对于content://com.example.app.provider/table1对应的MIME类型就可以写成:

vnd.android.cursor.dir/vnd.com.example.app.provider.table1

对于content://com.example.app.provider/table1/1对应的MIME类型就可以写成:

vnd.android.cursor.item/vnd.com.example.app.provider.table1

通知渠道一旦创建之后就不能再修改了。

创建通知渠道的步骤:

1、创建一个NotificationChannel对象,为通知渠道设置名称、描述和重要性级别。

2、创建一个NotificationManager

3、使用NotificationManager.createNotificationChannel()方法将通知渠道添加到系统

中。

创建一个通知渠道NotificationChannel至少需要渠道ID、渠道名称以及

重要等级这个参数

PendingIntent 不是立即执行的而在未来的某个时间执行某个操作。

Android 中,assets 目录是专门用于保存各种外部文件的,例如多媒体文

件音频、视频、图片等。 assets目录保存的文件可以打包在程序里,这些文件在运行打包的时候都会打入程序安装包中。常见的有:图像、音视频、配置文件、字体、自带数据库等。

在Android中播放音频文件一般都是使用MediaPlayer类实现的,播放视频文件使用VideoView类来实现的。

调用start()、pause()reset()isPlaying()方法实现播放器的播放、

暂停、停止功能

VideoView不支持直接播放assets目录下的视频资源。在res目录下,新建一个raw目录,可以放音频、视频之类的资源文件。

Service是Android系统中的四大组件之一,它可以和其他组件进行交互Service Android中一种可在后台执行长时间运行操作而不提供界面的应用组件。它非常适合执行那些不需要和用户交互而且还要求长期运行的 任务。Service的运行不依赖于任何用户界面

Android多线程编程方法有继承Thread类与实现Runnable接口。

更新应用程序里的UI元素,必须在主线程中进行。Android提供了一些机制来确保UI操作在UI线程中执行,解决了在子线程中进行UI操作的问题。例如,可以使用HandlerAsyncTaskrunOnUiThread等。

Handler的作用是将线程中需更新UI的操作信息传递到主线程,从而实现工作线程对UI的更新处理,最终实现异步消息的处理。

Android 中 的 异 步 消 息 处 理 主 要 由 4 个 部 分 组 成 : Message Handler MessageQueueLooper

解析Handler异步消息处理机制

当创建一个Handler时,它会自动与当前线程的Looper关联。然后,您可以使用Handler将消息发送到消息队列中。当消息到达队列顶部时Looper会将其传递给与之关联的Handler。然后,Handler会处理该消息并执行相关操作。

runOnUiThread()用于从子线程中切换到主线程来执行一些需要在主线程执行的操作。这个方法是Activity类中的方法。

Service需要重写onCreate()、onStartCommand()onDestroy()3个方法

Service启动的两种方式为startService、bindService

val intent = Intent(this, MyService::class.java)

startService(intent) // 启动Service

startService:用于启动服务,让服务在后台运行直到服务自我停止。

bindService:用于绑定服务,绑定服务只在其他应用程序组件绑定到它时运行。多个组件可以绑定到服务,但是当所有组件解除绑定时,服务将被销毁。

Service的生命周期

1.onCreate():创建服务的时候回调;

2.onStartCommand():开始服务的时候回调;

3.onDestroy():销毁服务的时候回调

4.onBind():绑定服务的时候回调;

5.onUnbind():解绑服务的时候回调;

Android上发送HTTP请求的方式有HttpURLConnection、OkHttp。

解析XML格式数据

解析JSON格式数据的方法有JSONObjectGSON(“还有两个不是重点但多选不一定不会考”)

JSON是一种轻量级的数据交换格式,它是JavaScript对象表示法的缩写。

题目摘选

在网上摘选了一些模拟题,可以找到对应的知识点复习。加粗的是要填的。

1.应用的基本构建块是:

A. Activity

B. Fragment

C. Service

D. Intent

2.下列哪个不是AndroidManifest.xml文件的主要用途?

A.声明应用权限

B.声明应用组件

C.定义应用的图标和名称

D.编写应用的业务逻辑

3.在Android中,用于存储持久化数据的SQLite数据库,默认存储在哪个目录

下?()

A./sdcard/

B./data/data/包名/databases/

C./res/

D./system/

4.Android中,用于实现页面间跳转和传递数据的主要机制是:

A. SharedPreferences

B. Intent

C. Bundle

D. FragmentManager

5.在Android Studio中,用于编写和测试布局文件的环境是:

A. Logcat

B. Layout Editor

C. Gradle

D. AVD Manager

6.哪个类用于处理用户的触摸事件,如点击、长按等?

A. View

B. Activity

C. Fragment

D. IntentFilter

7.Android应用中,使用哪种方式可以实现后台任务处理?

A. AsyncTask

B. Service

C. BroadcastReceiver

D. IntentService

8.如果你想在Android应用中显示一个Toast消息,你应该使用哪个类的实例?

A. Toast

B. AlertDialog

C. Dialog

D. Snackbar

9.Android中的Context是一个抽象类,它允许访问特定资源和类以及调用应用级操作,如启动活动、广播和接收意图等。在Activity中,可以通过哪个方法直接获取Context?

A. getApplicationContext()

B. getContext()

C. this(在Activity内部)

D. getBaseContext()

10.在Android开发中,用于处理用户输入的EditText组件,其输入类型设置为

密码时,应使用哪个属性?()

A. android:inputType="textPassword"

B. android:password="true"

C. android:inputType="password"

D. android:secure="true"

1.Android应用程序的四大组件是:Activity、BroadcastReceiver 、Service和ContentProvider

2.在Android中,使用 BroadcastReceiver 来监听和发送广播消息。

3.AndroidStudio中,用于构建和同步Gradle配置的按钮是Sync Project with Gradle Files 。

4.要在Android中创建一个新的线程,可以使用Java的Thread类。

5.在AndroidManifest.xml中,为应用声明网络权限的标签是<uses-permission android:name="android.permission.INTERNET" />

6.使用 LinearLayout 布局管理器,可以让子视图水平或垂直排列,并且每个子视图占据等量的空间。

7.Android中的资源文件通常放在项目的 res 目录下。

8.在Android中,使用 startActivity(Intent intent)方法可以启动一个新的Activity。

9.SharedPreferences是Android平台上一个轻量级的存储类,主要保存和读取的数据类型是 int和 String。

10.在Fragment中,当Fragment可见且用户与其交互时,Fragment会接收到 onResume()回调。

三、

  1. 简述Activity的生命周期,并说明至少三个重要的生命周期方法。

Activity的生命周期:Activity从被创建到销毁的整个过程中,会经历一系列的状态变化,这些状态变化称为Activity的生命周期。重要的生命周期方法包括:

onCreate:Activity被创建时调用,用于初始化设置。

onStart:Activity对用户可见时调用。

onResume:Activity开始与用户交互时调用。

onPause:Activity被其他Activity部分遮挡时调用。

onStop:Activity完全不可见时调用。

onDestroy:Activity被销毁时调用,通常用于清理资源。

  1. 解释Intent在Android应用中的作用,并给出一个使用Intent启动新Activity的例子。

Intent在Android应用中的作用:Intent是Android应用间交互的一种主要

方式,它用于不同组件之间的通信,如启动Activity、发送广播、启动服务等。

使用Intent启动新Activity的例子:

java

Intent intent =new Intent(this,NewActivity.class);

  1. 简述Android中Fragment的作用及其与Activity的区别。

Fragment:Fragment是Activity中的个片段,可以在一个Activity中嵌入多个Fragment,实现复杂的用户界面和逻辑。Fragment有自己的生命周期,但

依赖于Activity存在。

与Activity的区别:Activity是-个完整的屏幕,可以独立存在;而Fragment

必须嵌入到Activity中,不能独立存在。Fragment适用于在不同屏幕尺寸上创

建灵活的UI设计,提高代码复用性。

四、

1.编写一个简单的Activity,其中包含个EditText用于输入文本,-个Button

用于提交文本,以及个TextView用于显示提交的文本。要求:当点击Button

时,将EditText中的文本内容显示到TextView上。

Public class Main Activity extends AppCompatActivity{

EditText editText;

Button button;

TextView textView;

@Override

protected void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

editText =findViewById(R.id.editText);

button =findViewById(R.id.button);

textView =findViewById(R.id.textView);

button.setOnClickListener(new View.OnClickListener(){

@Override

public void onClick(View v){

String text = editText.getText().toString();

textView.setText(text);

}

})

}

}


一、

10.用于在后台执行长时间运行操作且没有用户界面的组件是?

A.Activity

B.Service

C.Intent

D.ContentProvider

11.Android中用于存储轻量级、简单数据的机制是?

A. SQLite

B. SharedPreferences

C. File

D. Intent

12.在Android中,用于接收系统或应用广播的组件是?

A. Activity

B. Service

C. BroadcastReceiver

D. ContentProvider

13.哪个生命周期方法会在Activity对用户可见时调用?

A. onStartO

B. onResumeO

C. onPauseO

D. onStopO

14.哪个方法用于在Activity中处理从另一个Activity返回的结果?

A.onActivityResultO

B. onCreateO

C. onStartO

D. onNewIntentO

15.在Android中,用于控制组件间通信的类是?

A. Bundle

B. Intent

C. IntentFilter

D. PendingIntent

二、

4.SharedPreferences是Android中用于实现数据持久化的一种轻量级机制。

5.Android中,用于实现跨进程通信的组件是ContentProvider

6.Intent用于在不同组件之间传递数据

7.Android应用的主线程也被称为UI线程。

8.在Android中,用于启动服务的Intent方法通常是startService()

三、

1.简述Android应用的四大组件及其主要功能:

Activity:用于展示用户界面,与用户进行交互。

Service:在后台执行长时间运行的操作,没有用户界面。

BroadcastReceiver:用于接收系统或应用发出的广播,并做出响应。

ContentProvider:实现跨应用共享数据,提供数据访问的接口。

2.描述Activity的生命周期,并解释每个关键阶段的作用:

onCreateO:Activity被创建时调用,用于初始化设置。

onStartO:Activity对用户可见时调用。

onResumeO:Activity开始与用户交互时调用。

onPauseO:Activity不再与用户交互,但可能仍然可见时调用

onStopO:Activity不再可见时调用。

onDestroyO:Activity被销毁前调用,用于清理资源。

3.什么是Intent?它在Android中有什么作用?

Intent是Android中用于组件间通信的一种机制,它可以启动组件(如Activity、Service等),也可以在不同组件之间传递数据。Intent描述了应用想要执行的操作,包括操作的动作、数据、附加数据、类别、组件名称等。

4.简述SharedPreferences与SQLite数据库的区别及适用场景:

SharedPreferences:轻量级的数据存储方式,适合存储简单的键值对数据,如用户偏好设置。它易于使用,但不适合存储大量数据或复杂数据。

SQLite数据库:是一个完整的数据库系统,支持SQL语句,适合存储大量或复

杂的数据,如用户信息、应用数据等。它提供了更高的灵活性和查询能力,但相对于SharedPreferences来说,使用上更为复杂。

四、

  1. 编写一个Activity,其中包含一个按钮。点击按钮后,启动另一个Activity,并在第二个Activity中显示"Hello,Android!"的文本信息。

//第—个Activity(MainActivity.java)

public class MainActivity extends AppCompatActivity{

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Button button =findViewById(R.id.myButton);

button.setOnClickListener(newView.OnClickListenerO{

@Override

public void onClick(View v) {

Intent intent = new Intent(MainActivity.this, SecondActivity.class);

startActivity(intent);

}

});

}

}

//第二个Activity(SecondActivity.java)

public class SecondActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_second);

TextView textView=findViewById(R.id.textView);

textView.setText("Hello, Android!");

  1. 创建一个简单的Android应用,该应用包含一个EditText和一个Button。用户可以在EditText中输入文本,点击Button后,应用会在Toast中显示用户输入的文本。请提供关键代码片段(包括布局文件和Activity代码)。

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical"

    android:padding="16dp">

    <!-- 输入文本的 EditText -->

    <EditText

        android:id="@+id/editText"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:hint="请输入文本"

        android:inputType="text" />

    <!-- 点击后触发显示的按钮 -->

    <Button

        android:id="@+id/button"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="显示文本" />

</LinearLayout>

public class MainActivity extends AppCompatActivity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        // 获取 EditText 和 Button 的引用

        EditText editText = findViewById(R.id.editText);

        Button button = findViewById(R.id.button);

        // 设置按钮的点击事件

        button.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                // 获取 EditText 中的文本

                String inputText = editText.getText().toString();

                // 显示 Toast 提示框,展示用户输入的文本

                Toast.makeText(MainActivity.this, inputText, Toast.LENGTH_SHORT).show();

            }

        });

    }

}

一、

1.在Android中,用于声明应用程序组件(如Activity、Service等)的配置文件是?()

A. AndroidManifest.xml

B. build.gradle

C. styles.xml

D. res/layout/activity_main.xml

2.哪个类用于在Android应用中处理用户界面的更新,但不直接处理用户的输入?

A. Activity

B. Service

C. AsyncTask

D. Handler

3.在Android中,用于在界面上显示文本信息的控件是?

A. TextView

B. EditText

C. ImageView

D. Button

4.AndroidStudio中,用于模拟Android设备以测试应用的工具是?

A. Android Debugger

B. Android Virtual Device (AVD)

C. Layout Inspector

D. Logcat

5.下列哪项是Android四大组件之一,但不具备用户界面?

A. Activity

B. Service

C. Broadcast Receiver

D. Content Provider

6.在Android中,用于存储简单数据的轻量级数据库是?

A. SQLite

B. MySQL

C. Realm

D. Firebase Realtime Database

7.要在Android应用中访问网络,通常需要添加哪个权限到AndroidManifest.xml?

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

B.<uses-permission

android:name="android.permission.ACCESS_FINE_LOCATION" />

C.<uses-permission

android:name="android.permission.READ_EXTERNAL_STORAGE"/>

D. <uses-permission android:name="android.permission.CAMERA" />

8.Android中的Intent主要用于什么?

A.跨进程通信

B.线程间通信

C.组件间通信

D.跨应用数据传输

11.关于Android Activity生命周期,以下哪个状态表示Activity正在前台,用户可以与其交互?

A. Started

B. Resumed

C. Paused

D. Stopped

13.在Android开发中,适配器(Adapter)的主要作用是什么?

A.用于在Activity和Fragment之间传递数据

B.用于将数据源(如List)绑定到UI组件(如ListView或RecyclerView)

C.用于处理网络请求

D.用于创建和管理线程

二、

1.Android应用的入口点是MainActivity类。

3.AndroidStudio中,用于编写和测试Android应用的集成开发环境(IDE)是Android Studio

4.SQLite数据库中,用于创建表的SQL语句以CREATE TABLE关键字开始。

5.在AndroidManifest.xml中,用于声明应用所需权限的标签是<uses-permission>

6.Intent传递数据时,可以使用putExtra方法,并通过getIntent().getExtras().get...方法在接收端获取这些数据。

8.在RecyclerView中,用于定义列表项布局的XML文件通常放在res/layout录下。

10.在Android中,用于在后台执行长时间运行的操作而不影响用户界面的组件

Service

三、

3.如何在Android应用中处理网络请求并显示结果:

通常使用异步方式进行网络请求,避免阻塞UI线程。请求成功后,在主线程中

更新UI,显示结果。

4.简述Intent的作用及两种主要类型:

Intent是Android中用于不同组件之间通信的一种机制,可以启动Activity、Service或发送广播。两种主要类型:

显式Intent:明确指定目标组件的Intent。

隐式Intent:不指定具体组件,而是通过Action、Category、Data等属性由系统查找最合适的组件。

5.描述如何在Android应用中使用SharedPreferences来存储和检索数据:

SharedPreferences用于存储轻量级的数据(如用户偏好设置)。通过

getSharedPreferencesO获取SharedPreferences实例,然后使用editO获取Editor对象进行数据存储,通过SharedPreferences实例直接检索数据。

1.编写一个AndroidActivity,其中包含一个EditText用于输入用户名和一个

Button。点击按钮后,将EditText中输入的用户名通过Toast显示出来。

public class MainActivity extends AppCompatActivity{

EditText editText;

Button button;

@Override

 protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

editText=findViewById(R.id.editText);

button =findViewById(R.id.button);

button.setOnClickListener(new View.OnClickListenerO{

@Override

public void onClick(View v) {

String username = editText.getTextO.toStringO;

Toast.makeText(MainActivity.this,"用户名:"+username,

Toast.LENGTH_SHORT).showO;

}

});

}

}

2.设计一个使用RecyclerView的简单列表界面,列表项显示从网络API获取的

数据(如新闻标题)。假设API返回JSON数据,你需要解析这些数据并显示在

RecyclerView中。请简要描述实现步骤,并给出关键代码片段(如Adapter的创建和数据绑定逻辑)。

创建RecyclerView的布局和列表项布局。

创建Adapter类,用于绑定数据和视图。

在Activity或Fragment中初始化RecyclerView,设置Adapter和LayoutManager。

发起网络请求,解析JSON数据,并更新Adapter的数据集。

public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.ViewHolder> {

    private List<NewsItem> newsList;

    // 构造函数

    public NewsAdapter(List<NewsItem> newsList) {

        this.newsList = newsList;

    }

    @Override

    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        // 创建视图并返回ViewHolder

        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.news_item, parent, false);

        return new ViewHolder(view);

    }

    @Override

    public void onBindViewHolder(ViewHolder holder, int position) {

        NewsItem newsItem = newsList.get(position);

        holder.title.setText(newsItem.getTitle());

    }

    @Override

    public int getItemCount() {

        return newsList.size();

    }

    // ViewHolder类,用于保存每个项的视图

    public static class ViewHolder extends RecyclerView.ViewHolder {

        TextView title;

        public ViewHolder(View itemView) {

            super(itemView);

            title = itemView.findViewById(R.id.news_title);

        }

    }

}

五、

  1. 请完成一个用户登录界面MainActivity,界面xml文件为activity_main.xml,界面中必须包含TextView控件、EditText控件以及Button控件,当点击Button按钮时,会弹出Toast对话框显示用户名和密码。

前台界面如下

ID:etUserName

ID:etPwd

ID:btnLogin

public class MainActivity extends AppCompatActivity{

private EditText etUserName;

private EditText etPassword;

private Button btnLogin;

protected void onCreate(Bundle savedInstanceState)

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main) ;

//初始化控件

etUserName = findViewByld(R.id.etUserName);

etPassword = findViewByld(R.id.etPassword);

btnLogin = findViewByld(R.id.btnLogin);

btnLogin. setOnClickListener(new View. OnClickListenerO

@Override

public void onClick(View v){

String username=etUserName.getText().toString();

String password=etPassword.getText().toString();

Toast.makeTextthis,

"用户名:"+ userName +"\n密码:"+ password

Toast.LENGTH_SHORD).showO://Toast提示信息

);

2、请编写一个短信草稿箱的程序,要求用户在文本编辑框中输入短信内容后,点击保

存短信"按钮,将短信保存在SharedPreferences中。(每空2分)

public classMainActivity extendsAppCompatActivityimplementsView.OnClickListener

/**

*短信文本输入框

*/

private EditText mWrite;

/**

*短信读取框

*/

private EditText mRead;

/**

*存储信息按钮

*/

private Button mSaveBTN;

/**

*读取已存信息按钮

*/

private Button mReadBTN;

private SharedPreferences mSP;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

/**

*获取SharedPreferences实例对象

*/

mSP=getSharedPreferences("data",Context.MODE_PRIVATE);

mWrite = findViewById(R.id.et_write);

mRead =findViewById(R.id.et_read);

mSaveBTN =findViewById(R.id.btn_save);

mReadBTN = findViewById(R.id.btn_read);

/**

*两个按钮设置单击监听

*/

mSaveBTN.setOnClickListener(this);

mReadBTN.setOnClickListener(this);

}

@Override

public void onClick(View v)

switch (v.getId()) {

case R.id.btn_read:

getSms();//调用获取信息的方法

break;

case R.id.btn_save:

saveSms();//调用保存信息的方法

break;

}

}

/***

*保存信息

*/

private void saveSmsO

if(!TextUtils.isEmpty(mWrite.getTextO.toStringO.trimO))

SharedPreferences.Editor edit=mSP.edit();//获取编辑器

edit.putString("sms",mWrite.getText().toString().trim();//保存数据

edit.commit();//提交数据

Toast.makeText(MainActivity.this,"信息存储成功",

Toast.LENGTH_SHORT).showO;

}else {

Toast.makeText(MainActivity.this,短信内容不能为空!!!,

Toast.LENGTH_SHORT).showO;

}

}

/**

*读取信息

*/

private void getSmsO {

String sms = mSP.getString("sms", null);//获得数据

if (sms != null) {

mRead.setText(sms);//数据显示在短信读取框中

}else {

Toast.makeText(MainActivity.this,"请先保存信息",

Toast.LENGTH_SHORT).showO;

}

}

}


http://www.kler.cn/a/471470.html

相关文章:

  • 回顾2024年重磅AI发布汇总
  • PostgreSQL学习笔记(二):PostgreSQL基本操作
  • conda指定路径安装虚拟python环境
  • 23.行号没有了怎么办 滚动条没有了怎么办 C#例子
  • WebSocket底层原理及 java 应用
  • Freemarker模板进行判空
  • 如何确保爬虫程序稳定运行?
  • Baumer工业相机堡盟LXT工业相机如何升级固件使得相机具有RDMA功能
  • 数据治理如何激活企业沉睡数据价值?
  • transformers蒸馏版本对话小模型
  • Redis源码阅读-源码阅读方式
  • 基于Django的农业管理系统
  • linux redis7.2.1安装,版本更新
  • kafka生产者专题(原理+拦截器+序列化+分区+数据可靠+数据去重+事务)
  • NLP 复习大纲
  • 华为云服务器一键安装鼎信通达云管系统(详细)
  • HNU人工智能期末复习知识点整理
  • AI赋能金融服务:效率与安全的新高度
  • kvm虚拟机网络桥接和读取ip
  • Conmi的正确答案——Cordova使用“src-cordova/config.xml”编辑“Android平台”的“uses-permission”
  • CNN-BiLSTM-Attention模型详解及应用分析
  • dubbo3 使用注册中心 nacos
  • 网络安全|应急响应沟通准备与技术梳理(Windows篇)
  • Spring Boot整合Minio实现文件上传
  • 设计模式从入门到精通之(三)单例模式
  • mindspore更新set_context()为set_device()