gpt4 book ai didi

java - 当我关闭我的应用程序时,为什么我的 Android 应用程序 Activitie 会重新打开

转载 作者:行者123 更新时间:2023-11-29 03:42:50 27 4
gpt4 key购买 nike

我已经尝试解决这个问题一段时间了,我确信有办法解决这个错误/问题,但我还没有找到。

我遇到的问题是,一旦我通过后退按钮或主页按钮退出应用程序,它就会关闭,但随后会重新打开我之前打开的一个 Activity 。

我是否需要在按下其中一个按钮后关闭我的 Activity,我将如何执行此操作。

这是打开其他 Activity 的主要 Activity 的代码...

package com.togdem.tunnels;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.Toast;
import android.widget.SeekBar.OnSeekBarChangeListener;

public class TunnelsActivity extends Activity
{

int vo = 2;
String mla = "";

public void onCreate(Bundle savedInstanceState)
{

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

ImageView p_btn = (ImageView) findViewById(R.id.imageView1);

p_btn.setOnTouchListener(new OnTouchListener()
{

public boolean onTouch(View view, MotionEvent event)
{

Intent myIntent2 = new Intent(view.getContext(), Cgt.class);

startActivity(myIntent2);

return false;

}

});

SeekBar skb = (SeekBar) findViewById(R.id.seekBar1);

try {

InputStream in = openFileInput("sa.txt");
if (in != null) {
InputStreamReader input = new InputStreamReader(in);
BufferedReader buffreader = new BufferedReader(input);

mla = "";

String line = new String();

line = buffreader.readLine();

mla += line;

Toast msg = Toast.makeText(getBaseContext(), "Loaded Saved Data", Toast.LENGTH_LONG);
msg.show();

in.close();

skb.setProgress(Integer.parseInt(mla.toString()));

}
else{}

} catch(Exception e){}

skb.setOnSeekBarChangeListener(new OnSeekBarChangeListener()
{

public void onProgressChanged(SeekBar event, int value, boolean sb)
{

vo = value;

}

public void onStartTrackingTouch(SeekBar event)
{



}

public void onStopTrackingTouch(SeekBar event)
{

try
{

OutputStreamWriter out = new OutputStreamWriter(openFileOutput("sa.txt", 0));
out.write(Integer.toString(vo));
out.close();

} catch (IOException e)
{



}

Toast msg = Toast.makeText(getBaseContext(), "Set Sensitivity to: " + Integer.toString(vo), Toast.LENGTH_LONG);
msg.show();

}

});

}

}

这是我要打开的 Activity 的代码...

package com.togdem.tunnels;
import java.io.OutputStreamWriter;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;

public class Cgt extends Activity
{

public void onCreate(Bundle savedInstanceState)
{

super.onCreate(savedInstanceState);

setContentView( R.layout.cgame );

ImageView btn1 = (ImageView) findViewById(R.id.btn_c);

ImageView btn2 = (ImageView) findViewById(R.id.btn_h);

btn1.setOnTouchListener(new OnTouchListener()
{

public boolean onTouch(View view, MotionEvent event)
{

try
{
OutputStreamWriter out = new OutputStreamWriter(openFileOutput("spd.txt", 0));

out.write("4");
out.close();

} catch (java.io.IOException e) {}

Intent myIntent = new Intent(view.getContext(), TunnelsSpA.class);

myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);

startActivity(myIntent);

finish();

return false;

}

});

btn2.setOnTouchListener(new OnTouchListener()
{

public boolean onTouch(View view, MotionEvent event)
{

try
{
OutputStreamWriter out = new OutputStreamWriter(openFileOutput("spd.txt", 0));

out.write("6");
out.close();

} catch (java.io.IOException e) {}

Intent myIntent = new Intent(view.getContext(), TunnelsSpA.class);

myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);

startActivity(myIntent);

finish();

return false;

}

});

}

public boolean onKeyDown(int KeyCode, KeyEvent event)
{

if (KeyCode == KeyEvent.KEYCODE_BACK);
{

onStop();

}

if (KeyCode == KeyEvent.KEYCODE_HOME);
{

onStop();

}

return super.onKeyDown(KeyCode, event);

}

protected void onStop()
{

finish();
Log.d("Stopping...", "Stopping the activity");

}

}

谢谢你能给我的任何帮助,

最佳答案

您似乎在某些基本的 Android 行为方面遇到了麻烦。

首先,当用户按下主页按钮时,他并没有退出您的应用程序,他只是将您的应用程序置于后台以便他可以去做其他事情。如果他这样做,他不希望您的应用程序退出。事实上,当他返回您的应用程序时,他希望发现它的状态与他离开时完全相同。这是标准的 Android 行为,除非有充分的理由,否则不应更改它。

其次,当用户按下BACK按钮时,Android自动结束当前的activity,返回到activity栈中的上一个activity。这是标准的 Android 行为,您无需编写任何特殊内容即可实现。

通过查看您的代码,您有启动 Activity Cgt 的 Activity TunnelsActivityTunnelsActivity 在启动 Cgt 时不会调用 finish() 因此 Activity 堆栈将在底部有 TunnelsActivity 并且然后在该 Activity 运行时在顶部显示 Cgt。在 Cgt 中,您正在捕获 BACK 按钮和 HOME 按钮并调用 onStop()。这绝对是错误的。你不应该调用 onStop()onStop() 在某些情况下由 Android 作为 Activity 生命周期的一部分调用。调用 onStop() 不会让您的 Activity 消失,也不会让您的应用程序退出。它所做的就是混淆Android。此外,当 Android 调用 onStop() 时,它希望代码调用到 super.onStop() 而您的代码没有这样做。这将导致代码抛出异常,这可能就是您看到 Activity 重新启动的原因。

我建议删除您的 onStop() 方法并删除您的 onKeyDown() 方法。这可能会解决您所有的问题。

关于java - 当我关闭我的应用程序时,为什么我的 Android 应用程序 Activitie 会重新打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12340001/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com