2013-11-03 125 views
0

在我的应用程序中,我有很多活动从一个按钮跳转到另一个按钮。我想确保当用户点击一个按钮离开该活动时,该活动不在后台运行,从而减慢了应用程序的运行速度。所以我想解决这个是在活动像这样的底部添加onStop方式:活动减慢应用程序

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.homeactivity); 

    btn1 = (Button)findViewById(R.id.button1); 
    btn1.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(HomeActivity.this, activity.class); 
      startActivity(i); 

     } 

    }); 

    btn2 = (Button)findViewById(R.id.button2); 
    btn2.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(HomeActivity.this, activity1.class); 
      startActivity(i); 

     } 

    }); 


} 
    @Override 
    protected void onStop() { 
     // TODO Auto-generated method stub 
     super.onStop(); 
    } 
} 

我需要知道,如果这个onStop是真正在后台运行,并减慢了应用程序停止活动。如果没有,有人可以协助我停止在后台运行的活动吗?

回答

3

在致电startActivity(i);后,请致电finish();,以确保您之前的活动已被杀死,并且不会占用更多资源。

此外,当您覆盖onStop()时,由于您只是调用该函数的super方法,因此您没有执行任何操作。通常,如果要确保数据连续性,则会覆盖活动生命周期方法。例如,您有一个接受用户输入的应用程序,并且要保留该应用程序,则会覆盖处理这些情况的方法onPause()onResume()。您可以采取类似于输入的方式,并将其存储在SharedPreferences中的onPause()方法中,并且调用onResume()方法时,将从SharedPreferences中获取这些值并继续使用它们。

一个很好的例子是onCreate()覆盖。这是启动活动时调用的第一个函数。在你的onCreate(),你有你的平常要求它的super方法,但是,你有更多的事情在那里。实际上,您只需拨打super函数就可以获得onCreate(),但这对您没有任何好处。在onCreate()函数中,您可以设置布局并分配按钮值以及onClickListeners和其他窗口小部件。

请记住,当您重写活动生命周期方法时,请在其中执行一些操作。

现在,如果你想回到你以前的活动(即开启了新的)这样做是你的第二个活动:

@Override 
protected void onBackPressed(){ 
    super.onBackPressed();   

    Intent intent = new Intent(this, ActivityOne.class); 
    startActivity(intent); 
    finish(); 
} 

这将带你到你的第一个活动并杀死第二个。

+0

'finish'();它释放了一些资源,但是当我按下后退按钮返回到该活动时,它将我带出整个应用程序。那么我是否将'onResume'放在活动的底部? –

+0

看到我更新的答案。您必须覆盖后退按钮并创建打开原始活动的意图。 – Razgriz

+0

我已经把'onBackPressed'放在了'onStop'的地方。一切正常,只是当我按下后退按钮时出现黑屏约半秒钟,然后它加载以前的活动 –

0

当您不需要活动时,就在活动开始后调用活动方法完成()。它会在发起活动后杀死当前的一个。

2

如果你想停止并杀死当前活动,只需调用finish();意向后

//start new activity 
Intent i = new Intent(HomeActivity.this, activity1.class); 
startActivity(i); 
//kill current activity 
finish(); 
0

请熟悉Android Activity Lifecycle。 Activity的基本前提是如此构建应用程序的代码,以便Android操作系统可以高效地管理它。例如,如果您开始的新活动是需要大量内存的游戏屏幕,则Android会销毁所有应用程序的先前活动,并在用户退出游戏活动时重新构建它们。

只要您的活动不做后台线程处理或向处理程序发送频繁的消息,它们将以任何方式减慢设备速度。如上所述,由于目前不在前台的所有活动都可能随时由操作系统删除,因此您不应该在第一时间对它们进行任何操作。