声明对象的新实例会导致OutOfMemoryFailure。为什么?

时间:2015-09-13 19:27:56

标签: java android object out-of-memory instantiation

我无法理解某些东西。我有一个单独的Listener类(Android),负责处理活动中的所有侦听器。

当我使用:

设置onclickListener时
.setOnClickListener(new ListenerActivity());

工作正常。但是,我想创建

public ListenerActivity myListener = new ListenerActivity();

并通过以下方式访问它:

SaveButton.setOnClickListener(myListener);

这应该是有意义的,因为我不是每次创建一个新的侦听器活动的实例,而是创建一个新的实例并重新使用它。但是我收到了这个错误:

java.lang.OutOfMemoryError: Failed to allocate a 600680 byte allocation with 4194304 free bytes and 57MB until OOM; failed due to fragmentation (required continguous free 602112 bytes where largest contiguous free 438272 bytes)
        at android.util.Log.getStackTraceString(Log.java:343)
        at com.android.internal.os.RuntimeInit.Clog_e(RuntimeInit.java:61)
        at com.android.internal.os.RuntimeInit.-wrap0(RuntimeInit.java)
        at com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException(RuntimeInit.java:86)
        at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
        at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)

为什么这不起作用?

编辑:

这是我的主要课程:

public class EditPageMainActivity extends AppCompatActivity {

这是我的听众课程:

public class EditJobListenerActivity extends EditJobMainActivity
    implements AdapterView.OnItemSelectedListener, AdapterView.OnClickListener,
    AdapterView.OnItemClickListener {

1 个答案:

答案 0 :(得分:1)

你不应该在一个Activity上调用new,而应该让Android OS为你做这个。

SaveButton.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View view) {
      Intent intent = new Intent(this, ListenerActivity.class);
      startActivity(intent);
    }
});

有关启动活动的详细信息,请查看docs