栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Anroid Studio实现简单页面跳转了解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Anroid Studio实现简单页面跳转了解

文章目录
  • 组件简介:
    • 活动(Activity) - 用于表现功能,最为常用
    • Android的任务、进程和线程详解
      • 任务
      • 进程
      • 线程
    • 应用程序的生命周期
      • Activity的生命周期
    • Intent对象
    • 页面跳转生命周期
    • 跳转带返回值
    • 结果展示

组件简介:

Android应用程序由下列组件组成:

  • Activity - 用于表现功能
  • Service - 相当于后台运行的 Activity
  • Broadcast Receiver - 用于接收广播
  • Content Provider - 内存承载器
活动(Activity) - 用于表现功能,最为常用
  • 每一个Activity都要在AndroidManifest.xml中声明
  • Android应用程序的任务、进程和线程
Android的任务、进程和线程详解 任务

Android系统管理任务和返回栈的方式,就是把所有启动的Activity都放入到一个相同的任务当中,通过一个“后进先出”的栈来进行管理的。

事件Task栈
A:点击Email应用,进入收件箱A
B:选中一封邮件,点击查看详细A,B
C:点击回复,开始写新邮件A,B,C
D:点击选择联系人,进入选择联系人界面A,B,C,D
C:选择号了联系人后,继续写邮件A,B,C
B:写好邮件,发送完成,回到原始邮件A,B
A:点击返回,回到收件箱A
退出EmailNull
进程
  • 进程是低级核心处理过程,用于运行应用程序代码
  • 组件运行的进程由AndroidManifest.xml控制
  • 分类为:前台进程,可见进程,服务进程,后台进程,空进程

① 前台进程:正在前台运行的进程,是必须的用户操作,不到万不得已不会被kill。

前台进程包括:

  • 拥有用户正在交互的 Activity(已调用 onResume())
  • 拥有某个 Service,后者绑定到用户正在交互的 Activity
  • 拥有正在“前台”运行的 Service(服务已调用 startForeground())
  • 拥有正执行一个生命周期回调的 Service(onCreate()、onStart() 或 onDestroy())
  • 拥有正执行其 onReceive() 方法的 BroadcastReceiver

② 可见进程:没有任何前台组件、但仍会影响用户在屏幕上所见内容的进程,一般也不会被kill。

可见进程包括:

  • 拥有不在前台、但仍对用户可见的 Activity(已调用 onPause())
  • 拥有绑定到可见(或前台)Activity 的 Service

③ 服务进程:它们通常在执行一些用户关心的操作,除非内存不足以维持所有前台进程和可见进程同时运行,否则系统会让服务进程保持运行状态。

服务进程包括:

  • 正在运行 startService() 方法启动的服务,且不属于上述两个更高类别进程的进程。

④ 后台进程:后台进程对用户体验没有直接影响,系统可能随时终止它们,以回收内存供前台进程、可见进程或服务进程使用。通常会有很多后台进程在运行,因此它们会保存在 LRU 列表中,以确保包含用户最近查看的 Activity 的进程最后一个被终止。如果某个 Activity 正确实现了生命周期方法,并保存了其当前状态,则终止其进程不会对用户体验产生明显影响,因为当用户导航回该 Activity 时,Activity 会恢复其所有可见状态。

后台进程包括:

  • 对用户不可见的 Activity 的进程(已调用 Activity的onStop() 方法)

⑤空进程:保留这种进程的的唯一目的是用作缓存,以缩短下次在其中运行组件所需的启动时间。 为使总体系统资源在进程缓存和底层内核缓存之间保持平衡,系统往往会终止这些进程。

空进程包括:

  • 不含任何活动应用组件的进程
线程
  • 每个进程有一到多个线程运行
  • 进程中的所有组件都在UI线程中实例化,以保证应用程序是单线程的
  • 线程通过java的标准对象Thread创建
  • 永远要记住:
    • 不要阻塞UI线程!
    • 不能再非UI线程中更新UI!
应用程序的生命周期
  • 应用程序的生命周期是指从创建到结束的全过程
  • Android框架管理而不是通过应用程序管理
Activity的生命周期

oncreate()->onstart()->onResume()->onRestart()->onPouse()->onStop()->onDestory()

  • 被一个Activity栈管理
  • 五个状态:启动,运行,暂停,停止,销毁
    • 启动:Activity被压入栈顶
    • 运行:在栈顶的Activity就是处于运行状态。
    • 暂停:不处于栈顶但是仍然用户可见的活动,该活动就是处于暂停状态。
    • 停止:当Activity完全不可见时,它处于停止状态,如果系统内存不足,那么这种状态下的Activity很容易被销毁。
    • 销毁:Activity从栈中移除

Intent对象

Intent - 用于连接以上各个组件,并在其间传递消息
BroadcastReceiver - 用于接收广播

在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。

  1. 俩个activity之间的跳转
    Intent intent = new Intent(this , SencondActivity.class);
    startActivity(intent);
  2. 返回
    finish();
  3. 带数据操作
    startActivityForResult(new Intent(this , DeviceListActivity.class),1);
页面跳转生命周期

代码示例:

主界面 activity_man.xml:




    

    

跳转到第二个界面 second.xml




    

string.xml


    LiftTest
    跳转
    返回
    发送数据

主程序Mainactivity.java

package com.zufe.hmf;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    public MainActivity() {
        super();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i("com.hmf","onCreate A");
    }

    public void go(View view){
        Toast.makeText(this,"按下了跳转按钮",Toast.LENGTH_SHORT).show();
        Intent intent = new Intent(this , Second.class);
        startActivity(intent);
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.i("com.hmf","onStart A");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i("com.hmf","onRestart A");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i("com.hmf","onStop A");

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i("com.hmf","onDestroy A");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.i("com.hmf","onPause A");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i("com.hmf","onResume A");
    }
}

跳转到第二个Second.java

package com.zufe.hmf;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

import androidx.appcompat.app.AppCompatActivity;

public class Second extends AppCompatActivity {
    public Second() {
        super();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second);
        Log.i("com.hmf","onCreate B");
    }

    public void OnCancel(View view) {
        Intent intent = new Intent(this , MainActivity.class);
        startActivity(intent);
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.i("com.hmf","onStart B");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i("com.hmf","onRestart B");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i("com.hmf","onStop B");

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i("com.hmf","onDestroy B");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.i("com.hmf","onPause B");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i("com.hmf","onResume B");
    }
}

注意!!!新建的Activity都要在AndroidManifest.xml中声明!!!

AndroidManifest.xml:




    
        
            
                

                
            
        
        
    


运行程序:

​ ## 观察Run运行栏发现如下返回值:

跳转带返回值

俩个跳转方法代码修改如下:

    public void go(View view){
        Toast.makeText(this,"按下了跳转按钮",Toast.LENGTH_SHORT).show();
        startActivityForResult(new Intent(this , DeviceListActivity.class),1);
    }

    public void OnCancel(View view) {
        Bundle bundle = new Bundle();
        bundle.putString("returnData","B");
        Intent it = new Intent();
        it.putExtras(bundle);
        setResult(RESULT_OK,it);
        finish();
    }

带参数返回需要重写onActivityResult(int requestCode, int resultCode, @Nullable Intent data)方法

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        String result = data.getExtras().getString("return");
        //Log.i(TAG,result);
        TextView textView = findViewById(R.id.textView);
        textView.setText(result);
    }

当然,也可以自己另外写一个input输入框来输入想要传输的数据,在xml中加入一个输入框:

    

可以通过getText来获取输入的数据

		EditText text = findViewById(R.id.INPUT);
        String data = text.getText();
结果展示

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/273990.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号