簡體   English   中英

如何銷毀Android中的活動並從初始設置開始?

[英]How to destroy an activity in Android and start with initial settings?

在應用程序運行時,我按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();
    }
}

Quote:“為此,您的所有活動都必須是MyRootActivity的子級。

然后,當您要確定要關閉應用程序時,只需調用MyRootActivity.finishAll();即可。

我不知道如何在我的MainActivity中以及在哪里植入此Activity。 關閉應用程序時如何確定(知道)? 我在哪里調用MyRootActivity.finishAll();

我認為當用戶離開該活動時,您不想保留該活動的歷史記錄。

為此,您可以從開始活動的位置意圖中設置標志“ FLAG_ACTIVITY_NO_HISTORY”。 喜歡 :

Intent intent = new Intent(this,MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);

或在清單中為此活動設置android:noHistory="true"

來自開發人員文檔:

android:noHistory:當用戶離開活動並在屏幕上不再可見時,是否應該從活動堆棧中刪除該活動並完成(調用了finish()方法)-如果應該完成,則為“ true”,如果不是,則為“ false”。 默認值為“ false”。

值為“ true”表示該活動將不會留下歷史痕跡。 它不會保留在任務的活動堆棧中,因此用戶將無法返回到該任務。

如果您不想在用戶離開活動時保持任何狀態,那么@abhishesh是正確的,則應使用FLAG_ACTIVITY_NO_HISTORY標志,並且每次都將重新創建您的活動,就像以前從未調用過一樣。

或者,您可以在活動中覆蓋onPauseonResume ,以分別控制離開和返回活動時重置的內容。 例如,對於TTS問題,您可以(並且應該應該)保留對TextToSpeech對象的引用,並在onPause方法中對其調用shutdown()

如果將initTTS()方法移到onResume ,這意味着您的TTS應該在您每次離開活動時停止,並在返回時從頭開始。 如果將其保留在onCreate ,它將在您離開活動時停止,並且直到活動被系統銷毀后才能再次開始,這是無法完美預測的。

最簡單的方法將其添加到清單中launchMode =“ singleTask”

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

每次用戶按下圖標應用程序時,它都會像新應用程序一樣開始運行,並會自動銷毀除后台通過任務管理器返回應用程序外的所有其他活動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM