1

私はしばらくの間この問題を解決しようとしてきました、そして私はこのエラー/問題を解決する方法があると確信しています、しかし私はまだそれを見つけていません。

私が抱えている問題は、戻るボタンまたはホームボタンを使用してアプリを終了すると、アプリは閉じますが、以前に開いていたアクティビティの1つを再び開くことです。

これらのボタンの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

アプリケーションはStopped State...アクティビティ(アプリアクティビティ)が別のForeGroundアクティビティによって隠されている場所にあります...

メモリが必要なときにSystemこれを強制終了するか、またはを呼び出すことで強制終了できます。Activityfinish()finishActivity()

于 2012-09-09T14:43:59.067 に答える
2

Androidの基本的な動作に問題があるようです。

まず、ユーザーがHOMEボタンを押しても、アプリケーションを終了するのではなく、アプリケーションをバックグラウンドに置いて、他のことを実行できるようにします。彼は、これを行った場合にアプリケーションが終了することを期待していません。実際、彼があなたのアプリケーションに戻ったとき、彼はそれを去ったときとまったく同じ状態でそれを見つけることを期待しています。これはAndroidの標準的な動作であり、本当に正当な理由がない限り、変更しないでください。

次に、ユーザーが[戻る]ボタンを押すと、Androidは現在のアクティビティを自動的に終了し、アクティビティスタック内の前のアクティビティに戻ります。これはAndroidの標準的な動作であり、これを実現するために特別なことを書く必要はありません。

コードを見ると、アクティビティTunnelsActivityを開始するアクティビティがありCgtます。開始時にTunnelsActivityは呼び出さないため、アクティビティスタックは、そのアクティビティの実行時に下部に配置され、次に上部に配置されます。戻るボタンとホームボタンをキャッチして、を呼び出しています。これは間違いなく間違っています。絶対に電話しないでください。特定の状況では、アクティビティライフサイクルの一部としてAndroidによって呼び出されます。呼び出しても、アクティビティが消えたり、アプリケーションが終了したりすることはありません。Androidを混乱させるだけです。また、Androidが呼び出すと、コードがfinish()CgtTunnelsActivityCgtCgtonStop()onStop()onStop()onStop()onStop()super.onStop()あなたのコードはそれをしていません。これにより、コードで例外がスローされます。これが、アクティビティが再開されるのを確認している理由である可能性があります。

onStop()メソッドを削除して、メソッドを削除することをお勧めしますonKeyDown()。それはあなたのすべての問題を解決するかもしれません。

于 2012-09-09T21:20:02.440 に答える
0

アプリケーションを終了するために使用するだけですSystem.exit(0);

finish();を使用しないでください。

于 2020-12-04T20:53:48.637 に答える