2015-09-26 45 views
0

在應用程序運行時,我按HOME按鈕關閉應用程序。當我再次啓動應用程序,它恢復或不重新設置一些值,例如我使用initTTS()這是文本到語音當我再次啓動應用程序時,我聽到一些演講,像他記得最後一個動作,當我發生關閉並在Android設備上啓動應用程序,如果我從我的設備從android-stido啓動應用程序它從一開始就像一切都開始復位我想知道爲什麼當我從設備關閉我的應用程序,並再次啓動它記得一些最後的行動。我希望應用程序以初始設置開始。我使用完成()完成活動,但它不工作。有任何想法嗎 ?如何銷燬Android中的活動並從初始設置開始?

例如,這我在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(); 
    } 
} 

名言:「對於所有的活動都需要有孩子的MyRootActivity。

然後當你要確定你正在關閉你的應用程序 - 只需調用MyRootActivity.finishAll();「

我不明白如何以及在哪裏將此活動植入到我的MainActivity中。 如何確認(知道)何時關閉我的應用程序? 我在哪裏調用MyRootActivity.finishAll(); ?

回答

0

我想你不想在用戶離開該活動時保留活動的歷史跟蹤。

爲此,您可以從您開始活動的目的地意圖設置標誌「FLAG_ACTIVITY_NO_HISTORY」。像:

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

或清單中設置android:noHistory="true"該活動。

從顯影劑文檔:

機器人:noHistory: 無論是否活動應該從活動堆棧被移除和結束(其光潔度()調用的方法)當用戶 從它導航離開和它在屏幕上不再可見 - 如果應該完成,則爲「真」 ,否則爲「假」。缺省值是 「false」。

「true」的值表示活動不會留下歷史追蹤。它不會保留在 任務的活動堆棧中,因此用戶將無法返回。

+0

我不明白我把Intent實例行和addFlags行放在哪裏。我現在所做的就是在MainActivity繼承ActionBarActivity行之後添加實例行,然後在setContentView(R.layout.activity_main)行後面的onCreate中添加intent.addFlags行。但是這會讓我的程序崩潰。所以我想我沒有在當前的地方添加這行。 –

+0

只需在清單中添加android:noHistory = true,即可在其中聲明您的活動。 – abhishesh

0

如果你不想保持任何狀態當用戶離開一個活動,然後@abhishesh是正確的,你應該使用FLAG_ACTIVITY_NO_HISTORY標誌,你的活動將被每次重新創建,就好像它從來沒有之前被調用過。

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

如果您將initTTS()方法移動到onResume,這意味着只要您離開該活動,您的TTS就應該停止,並且應該在返回時從頭開始。如果將它放在onCreate中,它將在您離開活動時停止,並且在系統銷燬活動之前不會再次開始,這是無法完美預測的。

0

最簡單的做法將其添加到您的清單launchMode =「singleTask」

<activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     android:launchMode="singleTask" 
     > 
每次當上圖標的應用程序用戶按下了開始像新的應用程序,並自動銷燬所有後臺等活動之外的情況時,用戶時間

通過任務管理器回到應用程序。