活动没有被杀死

时间:2011-11-26 00:45:31

标签: android

在我的应用中的某一点,用户从嵌入到选择活动中的Gallery小部件中选择一个图像。选择后,下一个活动加载。

下一个活动使用更多位图。为了保持堆大小不变,我试图在不再需要它之后销毁选择活动。使用DDMS,我注意到当我调用finish()时,活动没有被杀死。然后我开始将活动剥离到最低限度,活动似乎仍未完成。下面显示我剩下的内容

public class ImageSelectActivity extends Activity {  

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
                             WindowManager.LayoutParams.FLAG_FULLSCREEN);

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

    setContentView(R.layout.selectionpage);  
}

public void buttonClick(View v){
     Intent intent = new Intent(ImageSelectActivity.this, MainActivity.class);
     intent.putExtra("imageID", 0);
     startActivity(intent);
     finish();          
}

在DDMS上发现ImageSelectActivity仍然活着之后。我查看了GC根的路径并获得了以下内容:

Java.lang.Thread
 +- android.app.ContextImpl
  +- app.myapplication.ImageSelectActivity

另一件事,如果我按回应用程序关闭。我完全迷失了。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

当不再引用活动时,

finish()最终会导致活动被销毁。你在buttonClick方法中触发的意图保留了旧活动,我想这就是为什么它不会立即被破坏。但不要担心。只要您不保留对View元素或类似内容的静态引用,GC就会到达它。

答案 1 :(得分:1)

这就是Android的工作原理。当你调用“完成()”时,基本上就是退出活动。 Android不会从运行进程列表中提取它,直到出于性能原因绝对必须(为什么浪费资源转储不需要的资源?)。它将存在于内存中,直到需要内存为止。然而,它就像死了一样好。

这个例外(我现在可以想到)就是你有一个线程在运行。线程将持续运行或直到它们结束,但它们将在调用finish()后继续运行。

关于你的最后一件事,如果你在应用程序的第一个Activity,按下后退按钮应该关闭它(类似于调用finish())。

答案 2 :(得分:0)

无论如何在完成()后你应该使用一个返回声明。