移动应用程序设计基础——Android环境构建与Activity生命周期

简介: 安装智能手机开发相关软件平台,并在此基础上测试Activity的生命周期过程。5、 完成智能手机开发平台安装、以及相关配置;6、 并实现Hello World;7、 添加Log日志,通过Log日志验证Ac1、 安装JAVA JDK2、 安装Android Studio,熟悉AS的基本操作,改变AS的字体,显示方式;截图和文字说明。3、 建立新项目,实现Hello World。说明各个文件的作用,以及各个关键语句的作用或含义,给出程序的运行结果。4、 设置生命周期的Log日志,分别执行相关操作

《移动应用程序设计基础》实 验 报 告(一)

实验名称:

Android环境构建与Activity生命周期

所使用的工具软件及环境:

JDK1.8,Android Studio

(一)

一、实验目的:

安装智能手机开发相关软件平台,并在此基础上测试Activity的生命周期过程。

    1. 完成智能手机开发平台安装、以及相关配置;
    2. 并实现Hello World;
    3. 添加Log日志,通过Log日志验证Activity生命周期中的7个方法执行过程;
    4. 了解项目的基本文件目录结构,了解Activity周期中的4种状态。

    二、实验内容:

      1. 安装JAVA JDK
      2. 安装Android Studio,熟悉AS的基本操作,改变AS的字体,显示方式;截图和文字说明。
      3. 建立新项目,实现Hello World。说明各个文件的作用,以及各个关键语句的作用或含义,给出程序的运行结果。
      4. 设置生命周期的Log日志,分别执行相关操作
        • 在MainActivity中复写onCreate 、onStart、onResume 、onPause 、onStop 、onDestroy 和onRestart;
        • 分别在各个方法中添加日志监视语句,例如:Log.e(“ActivityLife”, "onCreate");
        • 分别执行
          1. 打开程序,在LogCat的输出日志中检查输出情况,执行顺序是否为onCreate()onStart()onResume()
          2. 按下back键,在LogCat的输出日志中检查输出情况,执行顺序是否为onPause()、onStop()、onDestory();
          3. 按下home键,在LogCat的输出日志中检查输出情况,执行顺序是否为onPause()、onStop();
          4. 再启动HelloWorld,在LogCat的输出日志中检查输出情况,执行顺序是否为onRestart()、onStart()、onResume();

            三、源代码

            //activity_main.xml
              <?xml version="1.0" encoding="utf-8"?>
            <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:app="http://schemas.android.com/apk/res-auto"
                xmlns:tools="http://schemas.android.com/tools"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                tools:context=".MainActivity">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Hello World!"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintLeft_toLeftOf="parent"
                    app:layout_constraintRight_toRightOf="parent"
                    app:layout_constraintTop_toTopOf="parent" />
            </androidx.constraintlayout.widget.ConstraintLayout>

            image.gif

            //MainActivity.java 
            package com.example.helloworld;
            import androidx.appcompat.app.AppCompatActivity;
            import android.os.Bundle;
            import android.app.Activity;
            import android.os.Bundle;
            import android.util.Log;
            public class MainActivity extends Activity {
                public MainActivity(){
                    Log.e("TAG","MainActivity()");
                }
                @Override
                protected void onCreate(Bundle savedInstanceState) {
                    Log.e("TAG","onCreate()");
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.activity_main);
                }
                @Override
                protected void onStart() {
                    Log.e("TAG","onStart()");
                    super.onStart();
                }
                @Override
                protected void onResume() {
                    Log.e("TAG","onResume()");
                    super.onResume();
                }
                @Override
                protected void onPause() {
                    Log.e("TAG","onPause()");
                    super.onPause();
                }
                @Override
                protected void onStop() {
                    Log.e("TAG","onStop()");
                    super.onStop();
                }
                @Override
                protected void onDestroy() {
                    Log.e("TAG","onDestroy()");
                    super.onDestroy();
                }
                @Override
                protected void onRestart() {
                    Log.e("TAG","onRestart()");
                    super.onRestart();
                }
            }

            image.gif

            四、实验结果测试

            image.gif编辑

            1.此时安装好的JDK版本

            image.gif编辑

            23.能够创建一个新工程项目helloworld且能运行,在Android studio中能够改变主题和字体样式和大小,此时我选择默认不做改变

            image.gif编辑

            4.1)首次打开helloworld查看运行周期日志

            image.gif编辑

            2)点击back,查看周期日志

            image.gif编辑

            3)重新启动,查看周期日志

            image.gif编辑

            (4)点击home,查看周期日志

            五、收获与体会

            能够安装好JDK,收悉了android studio各个工程项目中的文件,能够初次运行helloworld,且学习到了app的生存周期并且能够查看日志。

            (二)

            一、实验目的:

            安装智能手机开发相关软件平台,并在此基础上测试Activity的生命周期过程。

              1. 完成智能手机开发平台安装、以及相关配置;
              2. 并实现Hello World;
              3. 添加Log日志,通过Log日志验证Activity生命周期中的7个方法执行过程;
              4. 了解项目的基本文件目录结构,了解Activity周期中的4种状态。

              二、实验内容:

              5、bug调试、测试实验

              以下代码是实现一个进度条测试程序,在界面(activity_main.xml)上放置一个水平长条形的进度条(style:progressBarStyleHorizontal,id:horizontal_pbar),以及一个启动进度条的按钮。点击按钮,进度条从0增加到满格100,进度条停止。由于代码中存在各种问题,现请你将代码修正和调试正确。

              三、源代码

              //activity_main.xml
                <?xml version="1.0" encoding="utf-8"?>
              <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="com.example.helloworld.MainActivity">
                  <ProgressBar
                      android:id="@+id/horizontal_pbar"
                      style="?android:attr/progressBarStyleHorizontal"
                      android:layout_width="match_parent"
                      android:layout_height="50dp"
                      android:max="100" />
                  <Button
                      android:id="@+id/start_pbar_btn"
                      android:layout_width="match_parent"
                      android:layout_height="wrap_content"
                      android:text="启动进度条" />
              </LinearLayout>

              image.gif

              //MainActivity.java 
              package com.example.helloworld;
              import androidx.appcompat.app.AppCompatActivity;
              import android.os.Bundle;
              import android.os.Handler;
              import android.view.View;
              import android.widget.Button;
              import android.widget.ProgressBar;
              public class MainActivity extends AppCompatActivity {
                  private ProgressBar mProgress;
                  private Handler mHandler = new Handler();
                  private Boolean FLAG=true;
                  private Button startpbarbtn;
                  int mProgressStatus=0;
                  protected void onCreate(Bundle icicle) {
                      super.onCreate(icicle);
                      setContentView(R.layout.activity_main);
                      mProgress = (ProgressBar) findViewById(R.id.horizontal_pbar);
                      //设置监听按钮
                      startpbarbtn = (Button)findViewById(R.id.start_pbar_btn);
                      //设置监视内容
                      startpbarbtn.setOnClickListener(new View.OnClickListener() {
                          @Override
                          public void onClick(View view) {
                              //监听
                              new Thread(new Runnable() {
                                  public void run() {
                                  //推荐使用标志位使其不执行代码,不推荐使用true
                                      while (FLAG) {
                                          mProgressStatus = addNum();
                                          // 更新进度条
                                          // post方法推送一个Runnable到Handler,可以在此更新UI
                                          mHandler.post(new Runnable() {
                                              public void run() {
                                                  if(mProgressStatus<100) {
                                                      mProgress.setProgress(mProgressStatus);
                                                      mProgressStatus++;
                                                  }
                                                  //执行完成后隐藏进度条并将标志设置为false
                                                  else {
                                                      mProgress.setVisibility(View.INVISIBLE);
                                                      FLAG = false;
                                                  }
                                              }
                                          });
                                      }
                                  }
                                  private int addNum() {
                                      try {
                                          Thread.sleep(100);
                                      } catch (InterruptedException e) {
                                          e.printStackTrace();
                                      }
                                      return mProgressStatus;
                                  }
                              }).start();
                          }
                      });
                  }
              }

              image.gif

              四、实验结果测试

              image.gif编辑

              1.bug程序修改完成,启动

              image.gif编辑

              2.点击启动进度条,开始启动

              image.gif编辑

              3.进度完成,隐藏进度条

              五、收获与体会

              对部分代码进行修改,增加了按钮监听,使得程序可以正常运行,对监听器的运用和Android studio代码的编写有了进一步的了解和运用。

              相关实践学习
              日志服务之使用Nginx模式采集日志
              本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
              相关文章
              |
              15天前
              |
              移动开发 Java Android开发
              构建高效Android应用:探究Kotlin与Java的性能差异
              【4月更文挑战第3天】在移动开发领域,性能优化一直是开发者关注的焦点。随着Kotlin的兴起,其在Android开发中的地位逐渐上升,但关于其与Java在性能方面的对比,尚无明确共识。本文通过深入分析并结合实际测试数据,探讨了Kotlin与Java在Android平台上的性能表现,揭示了在不同场景下两者的差异及其对应用性能的潜在影响,为开发者在选择编程语言时提供参考依据。
              |
              17天前
              |
              数据库 Android开发 开发者
              构建高效Android应用:Kotlin协程的实践指南
              【4月更文挑战第2天】随着移动应用开发的不断进步,开发者们寻求更流畅、高效的用户体验。在Android平台上,Kotlin语言凭借其简洁性和功能性赢得了开发社区的广泛支持。特别是Kotlin协程,作为一种轻量级的并发处理方案,使得异步编程变得更加简单和直观。本文将深入探讨Kotlin协程的核心概念、使用场景以及如何将其应用于Android开发中,以提高应用性能和响应能力。通过实际案例分析,我们将展示协程如何简化复杂任务,优化资源管理,并为最终用户提供更加流畅的体验。
              |
              20天前
              |
              缓存 监控 Java
              构建高效Android应用:从优化用户体验到提升性能
              在竞争激烈的移动应用市场中,为用户提供流畅和高效的体验是至关重要的。本文深入探讨了如何通过多种技术手段来优化Android应用的性能,包括UI响应性、内存管理和多线程处理。同时,我们还将讨论如何利用最新的Android框架和工具来诊断和解决性能瓶颈。通过实例分析和最佳实践,读者将能够理解并实施必要的优化策略,以确保他们的应用在保持响应迅速的同时,还能够有效地利用系统资源。
              |
              25天前
              |
              编解码 算法 Java
              构建高效的Android应用:内存优化策略详解
              随着智能手机在日常生活和工作中的普及,用户对移动应用的性能要求越来越高。特别是对于Android开发者来说,理解并实践内存优化是提升应用程序性能的关键步骤。本文将深入探讨针对Android平台的内存管理机制,并提供一系列实用的内存优化技巧,以帮助开发者减少内存消耗,避免常见的内存泄漏问题,并确保应用的流畅运行。
              |
              26天前
              |
              调度 数据库 Android开发
              构建高效Android应用:Kotlin协程的实践与优化
              在Android开发领域,Kotlin以其简洁的语法和平台友好性成为了开发的首选语言。其中,Kotlin协程作为处理异步任务的强大工具,它通过提供轻量级的线程管理机制,使得开发者能够在不阻塞主线程的情况下执行后台任务,从而提升应用性能和用户体验。本文将深入探讨Kotlin协程的核心概念,并通过实例演示如何在实际的Android应用中有效地使用协程进行网络请求、数据库操作以及UI的流畅更新。同时,我们还将讨论协程的调试技巧和常见问题的解决方法,以帮助开发者避免常见的陷阱,构建更加健壮和高效的Android应用。
              34 4
              |
              28天前
              |
              移动开发 Java Android开发
              构建高效Android应用:Kotlin协程的实践之路
              【2月更文挑战第31天】 在移动开发领域,性能优化和流畅的用户体验一直是开发者追求的目标。随着Kotlin语言的流行,其异步编程解决方案——协程(Coroutines),为Android应用带来了革命性的并发处理能力。本文将深入探讨Kotlin协程的核心概念、设计原理以及在Android应用中的实际应用案例,旨在帮助开发者掌握这一强大的工具,从而提升应用的性能和响应能力。
              |
              17天前
              |
              Java Android开发 开发者
              构建高效Android应用:Kotlin协程的实践与优化
              在响应式编程范式日益盛行的今天,Kotlin协程作为一种轻量级的线程管理解决方案,为Android开发带来了性能和效率的双重提升。本文旨在探讨Kotlin协程的核心概念、实践方法及其在Android应用中的优化策略,帮助开发者构建更加流畅和高效的应用程序。通过深入分析协程的原理与应用场景,结合实际案例,本文将指导读者如何优雅地解决异步任务处理,避免阻塞UI线程,从而优化用户体验。
              |
              23天前
              |
              Java 编译器 Android开发
              构建高效Android应用:探究Kotlin与Java的性能差异
              在开发高性能的Android应用时,选择合适的编程语言至关重要。近年来,Kotlin因其简洁性和功能性受到开发者的青睐,但其性能是否与传统的Java相比有所不足?本文通过对比分析Kotlin与Java在Android平台上的运行效率,揭示二者在编译速度、运行时性能及资源消耗方面的具体差异,并探讨在实际项目中如何做出最佳选择。
              17 4
              |
              1天前
              |
              缓存 移动开发 Android开发
              构建高效Android应用:从优化用户体验到提升性能表现
              【4月更文挑战第18天】 在移动开发的世界中,打造一个既快速又流畅的Android应用并非易事。本文深入探讨了如何通过一系列创新的技术策略来提升应用性能和用户体验。我们将从用户界面(UI)设计的简约性原则出发,探索响应式布局和Material Design的实践,再深入剖析后台任务处理、内存管理和电池寿命优化的技巧。此外,文中还将讨论最新的Android Jetpack组件如何帮助开发者更高效地构建高质量的应用。此内容不仅适合经验丰富的开发者深化理解,也适合初学者构建起对Android高效开发的基础认识。
              2 0
              |
              1天前
              |
              移动开发 Android开发 开发者
              构建高效Android应用:采用Kotlin进行内存优化的策略
              【4月更文挑战第18天】 在移动开发领域,性能优化一直是开发者关注的焦点。特别是对于Android应用而言,由于设备和版本的多样性,确保应用流畅运行且占用资源少是一大挑战。本文将探讨使用Kotlin语言开发Android应用时,如何通过内存优化来提升应用性能。我们将从减少不必要的对象创建、合理使用数据结构、避免内存泄漏等方面入手,提供实用的代码示例和最佳实践,帮助开发者构建更加高效的Android应用。
              4 0