【安卓开发】activity不能完全关闭

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【安卓开发】activity不能完全关闭相关的知识,希望对你有一定的参考价值。

有两个活动A和B,每个活动有两个重载函数,如下:
public class A或者B extends SerialPortActivity

@Override
protected void onCreate(Bundle savedInstanceState)

界面各个组件被触发后执行的代码,通过button可以跳转到B

@Override
protected void onDataReceived(final byte[] buffer, final int size)
接受串口数据后执行的代码,可以跳转到B



现在有个问题,程序入口A两个重载函数可以正常运行,当A跳转到B的时候,B活动中onDataReceived这个重载函数是执行的却是A中onDataReceived的代码,好像是A的onDataReceived没有关闭。请问大神这是什么情况?

这几天也在研究窗体的特性,
当一个窗体(Activeity)不在当前屏时,如果被激活过,它仍会运行着,
所以,你的两个窗体都在执行通讯,前面一个窗体优先通讯着。
可以在窗体事件里 onPause()onStop()等,把当前的通讯停掉,
OnResume()事件里则要把通讯打开,查一查窗体有几个这方面事件。
也是刚学几天,不太精,但有C++基础,学的很快。。追问

我试过,onStop()和onPause()都不能把当前通信关掉,现在用onDestroy()也不行。还有没有其他办法?

追答

首先,这几个事件,能不能在窗体隐藏时得到触发,这是关键问题。
应该能触发的。
至于能不能真的关掉通讯,与本话题无关了,是你的通讯设计方法问题了,
你再攻关攻关肯定会解决的。

参考技术A 串口什么的不知道,但是Activity跳转之后,前一个Activity会执行onPause(),onStop(),你可以打印一下在执行onDataReceiverd()之前,是否已经onStop()。追问

我在onDataReceived加上onPause(),onStop(),还是这样,用onDestroy()也是一样的结果

追答

onPause和onStop不是你来调用的,是系统调用的,我的意思是在onPause和onStop中加打印语句,看看是在onData之前还是之後执行的

安卓开发 Activity入门

生命周期

Activity包含5种状态,涉及7种方法

  1. 启动状态

  2. 运行状态 ***

    即使内存不足,Android先销毁栈底的Activity,来确保当前Activity正常运行

  3. 暂停状态  (可见,无法获取焦点

  4. 停止状态  (完全不可见

  5. 销毁状态  

 

  OnCreat 创建时调用,初始化设置

  OnStart  Activity即将可见时调用 

  OnResume 获取焦点开始与用户交互时调用

  OnPause  在当前Activity被其他Activity覆盖或锁屏时调用

  OnStop 在Activity对用户不可见时调用

  OnDestroy 

  OnRestart

 

Activity的启动模式

  standard模式

  singleTop模式

  singleTask模式

  singleInstance模式

Activity 之间的跳转

  Intent

显式意图

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

隐式意图

Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
startActivity(intent);

category是一个默认值的话,可以省略不屑

在清单文件 AndroidManifest.xml 配置 <intent-filter> 如下所示

 

<intent-filter tools:ignore="AppLinkUrlError">
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="http" />
</intent-filter>

数据传递

intent.putExtra("data", "draymonder");

 

数据回传

// 请求方
Intent intent = new Intent(this, MainActivity.class);
startActivityForResult(intent, 1);



// 接收方回传数据
Intent intent  = new Intent();
intent.putExtra("data", "Hello");
setResult(1, intent);

  

// 请求方 因为 接收方Activity结束后 会调用回传函数
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityReslt(requestCode, resultCode, data);
    if(requestCode == 1) {
        if(resultCode == 1) {
            String str = data.getStringExtra("data");
            System.out.println(str);
        }
    }
}

 Bundle 传递信息

Intent intent = new Intent(this, Main2Activity.class);
Bundle bundle = new Bundle();
bundle.putString("data", "draymonder");
bundle.putInt("height", 173);
intent.putExtras(bundle);
startActivity(intent);

获取信息

Bundle bundle  = this.getIntent().getExtras();
String str = bundle.getString("data");
int height = (Integer) bundle.get("height");
Log.i("Main2",str + " " + height);

 

以上是关于【安卓开发】activity不能完全关闭的主要内容,如果未能解决你的问题,请参考以下文章

安卓开发 Activity入门

安卓开发-Activity中finish() onDestroy() 和System.exit()的区别(转)

安卓开发之Fragment数据传输到Activity+实例分析

安卓开发,SharedPreferences,怎么在其它Activity中取数据?

安卓常见架构之——mvp

安卓开发笔记 Activity