如何销毁Android中的活动并从初始设置开始?

时间:2015-09-26 22:58:49

标签: java android android-studio

在应用程序运行时,我按HOME按钮关闭应用程序。当我再次启动应用程序时,它恢复或不重置某些值,例如我使用initTTS()这是文本到语音,当我再次启动应用程序时,我听到一些演讲,就像他记得最后一个动作,它发生了当我关闭并启动Android设备上的应用程序如果我从我的设备启动android-stido应用程序它从一开始就像所有重置一样我想知道为什么当我从设备关闭我的应用程序并开始它再次记住了最后的一些动作。我希望应用程序以初始设置开始。我已经使用finish()来完成活动,但它无法正常工作。有什么想法吗?

例如,这是MainActivity的顶部:

public class MainActivity extends ActionBarActivity
{
    private static final int MY_DATA_CHECK_CODE = 0;
    TextToSpeech mTts;
    private String targetURL;
    private String urlParameters;
    private Button btnClick;
    private String clicking = "clicked";
    private String[] ipaddresses = new String[]{
        "http://192.168.1.5:8098/?cmd=nothing"};
    private String iptouse = "";
    private TextView text;
    private boolean connectedtoipsuccess = false;
    private int counter = 0;
    private NotificationCompat.Builder mbuilder;
    private Timer timer = new Timer();
    private TextView text1, text2, text3;
    private Button startButton;
    private Button pauseButton;
    private TextView timerValue;
    private long startTime = 0L;
    private Handler customHandler;
    long timeSwapBuff = 0L;
    private int servercheckCounter = 0;
    private byte[] checkServer = null;
    private boolean connectedSuccess = false;
    private TextView status, status1;
    private TextView uploadedfilescount;
    private int numberofuploadedfilescounter = 0;

    String a = null;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        startTime = SystemClock.uptimeMillis();
        serverChecksThread.start();
        status1 = (TextView) findViewById(R.id.textView3);
        timerValue = (TextView) findViewById(R.id.timerValue);
        uploadedfilescount = (TextView) findViewById(R.id.numberofuploadedFiles);
        uploadedfilescount.setText("Uploaded Files: 0")
        addListenerOnButton();
        initTTS();
    }

这是我看到的解决方案示例:

public class MyRootActivity extends Activity
{
    private static final String TAG=MyRootActivity.class.getName();
    private static ArrayList<Activity> activities=new ArrayList<Activity>();


    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        activities.add(this);
    }

    @Override
    public void onDestroy()
    {
        super.onDestroy();
        activities.remove(this);
    }

    public static void finishAll()
    {
        for(Activity activity:activities)
           activity.finish();
    }
}

引用:&#34;因此,您的所有活动都需要是MyRootActivity的孩子。

然后当您确定要关闭应用程序时 - 只需调用MyRootActivity.finishAll(); &#34;

我不知道如何以及在何处将此活动植入我的MainActivity中。 我如何确定(知道)何时关闭我的申请? 我在哪里调用MyRootActivity.finishAll(); ?

3 个答案:

答案 0 :(得分:0)

我认为您不希望在用户离开该活动时保留活动的历史记录。

为此,您可以从开始活动的位置设置标志“FLAG_ACTIVITY_NO_HISTORY”。喜欢:

EntityEntry

或在该活动的清单中设置Intent intent = new Intent(this,MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);

来自开发者文档:

  

android:noHistory:       是否应该从活动堆栈中删除活动并在用户时完成(调用其finish()方法)   导航远离它,它在屏幕上不再可见 - “真实”   如果它应该完成,如果没有,则为“假”。默认值为   “假”。

     

值“true”表示活动不会留下历史记录。它不会保留在活动堆栈中   任务,因此用户将无法返回它。

答案 1 :(得分:0)

如果您不希望在用户离开活动时保持任何状态,那么@abhishesh是正确的,您应该使用FLAG_ACTIVITY_NO_HISTORY标志,并且每次都会重新创建您的活动,就好像它一样之前从未被召唤过。

或者,您可以覆盖活动中的onPauseonResume,以便分别在离开和返回活动时更好地控制重置内容。例如,对于您的TTS问题,您可以(也可能应该)保留对TextToSpeech对象的引用,并使用shutdown()方法在其上调用onPause

如果您将initTTS()方法移至onResume,这意味着您的TTS应该在您离开活动时停止,并且应该在您返回时从头开始。如果你将它保留在onCreate中,它会在你离开活动时停止,并且在活动被系统破坏之前不会再次启动,这是不可能完美预测的。

答案 2 :(得分:0)

最简单的方法是添加到清单launchMode =&#34; singleTask&#34;

<activity
         android:name=".MainActivity" 
         android:label="@string/app_name"
         android:launchMode="singleTask"
         >

每当用户按下图标应用程序时,它就会像新应用程序一样启动,并在用户通过任务管理器返回应用程序的情况下自动销毁所有其他活动。