1

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

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

一旦我按下其中一个按钮,我是否需要关闭我的活动,我将如何去做。

这是我的主要活动的代码,它打开了我的其他活动......

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");

}

}

感谢你给与我的帮助,

4

3 回答 3

2

您似乎对一些基本的 Android 行为有问题。

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

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

通过查看您的代码,您有活动TunnelsActivity开始活动Cgt。启动时TunnelsActivity不会调用,因此当该活动运行时,活动堆栈将位于底部,然后位于顶部。在你抓住 BACK 按钮和 HOME 按钮并调用. 这绝对是错误的。你永远不应该打电话。在某些情况下,作为 Activity 生命周期的一部分被 Android 调用。调用不会使您的活动消失,也不会使您的应用程序退出。它所要做的就是迷惑Android。此外,当 Android 调用时,它期望代码调用到finish()CgtTunnelsActivityCgtCgtonStop()onStop()onStop()onStop()onStop()super.onStop()您的代码没有这样做。这将导致代码抛出异常,这可能就是您看到活动重新启动的原因。

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

于 2012-09-09T21:20:02.440 回答
2

您的应用程序位于Stopped State...其中Activity(您的应用程序 Activity)被另一个 ForeGround Activity 隐藏...

要么在需要内存System杀死它..要么你可以通过调用或杀死它Activityfinish()finishActivity()

于 2012-09-09T14:43:59.067 回答
0

仅用于退出应用程序 System.exit(0);

不使用完成();

于 2020-12-04T20:53:48.637 回答