我一直试图解决这个问题一段时间了,我确信有一种方法可以解决这个错误/问题,但我还没有找到。
我遇到的问题是,一旦我通过后退按钮或主页按钮退出应用程序,它就会关闭,但之后会重新打开我之前打开的一项活动。
按下其中一个按钮后,是否需要关闭我的活动?我将如何处理这些活动。
以下是我的主要活动的代码,用于打开我的其他活动......
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();
}
});
}
}
这是我试图打开的活动的代码......
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");
}
}
感谢您提供任何帮助,
答案 0 :(得分:2)
您的应用程序位于Stopped State
... 活动(您的应用活动)被另一个ForeGround活动隐藏...
当{strong>需要记忆时,System
可以杀死此Activity
..或者可以通过调用{{1}来杀死 }或finish()
答案 1 :(得分:2)
您似乎遇到了一些基本的Android行为问题。
首先,当用户按下HOME按钮时,他不是退出您的应用程序,他只是将您的应用程序放在后台,以便他可以去做其他事情。如果他这样做,他不希望你的申请退出。事实上,当他回到你的应用程序时,他希望找到它与他离开时的状态完全相同。这是标准的Android行为,除非你有充分的理由,否则你不应该改变它。
其次,当用户按下BACK按钮时,Android会自动完成当前活动并返回活动堆栈中的上一个活动。这是标准的Android行为,您无需编写任何特殊内容即可实现此目的。
通过查看您的代码,您可以使用活动TunnelsActivity
来启动活动Cgt
。 TunnelsActivity
在finish()
启动Cgt
时不会调用TunnelsActivity
,因此当活动正在运行时,活动堆栈底部会显示Cgt
,而顶部会Cgt
。在onStop()
中,您正在捕捉BACK按钮和HOME按钮并调用onStop()
。这绝对是错误的。你永远不应该致电onStop()
。在某些情况下,Android将onStop()
称为活动生命周期的一部分。致电onStop()
不会让您的活动消失,也不会让您的申请退出。它所做的就是混淆Android。此外,当Android调用super.onStop()
时,它希望代码调用代码未执行的onStop()
。这将导致代码抛出异常,这可能是您看到活动重新启动的原因。
我建议您删除onKeyDown()
方法并删除{{1}}方法。这可以解决你所有的问题。
答案 2 :(得分:0)
仅用于退出应用程序 System.exit(0);
不使用finish();