2015-09-26 49 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" 
     > 
每次当上图标的应用程序用户按下了开始像新的应用程序,并自动销毁所有后台等活动之外的情况时,用户时间

通过任务管理器回到应用程序。