0

因此,我创建了一个应用程序,其中有5个活动,其中有5个独立的soundBoards,其中有5个独立的soundPools。我还在每个活动中使用导航抽屉。当我运行应用程序时,它可以打开前两个活动,但每当我打电话给第三个时打开该应用程序停止工作。在内存监视器上,内存使用量达到64MB,然后崩溃。它只是模拟器被限制为64MB,并且它可以在手机上正常工作,或者是否有内存泄漏?当我切换到另一个活动,然后onStart重新打开时,还是不需要时,是否需要调用onStop?如果我做了这个项目我该怎么做?当我打开另一个活动时,应用程序崩溃

这里查看我的崩溃日志的链接:https://www.dropbox.com/s/x5obsexzgi2ofaa/crashlog2.docx?dl=0

MainActivity.java类:

public class MainActivity extends ActionBarActivity { 

DrawerLayout mDrawerLayout; 
ListView mDrawerList; 
ActionBarDrawerToggle mDrawerToggle; 
String[] mDrawerListItems; 

SoundPool Ken; 
int goodschoolId; 
int challengeId; 
int frontId; 
int driverId; 
int roadId; 
int tiesId; 
int noId; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Ken = new SoundPool(1, AudioManager.STREAM_MUSIC, 1); 
    goodschoolId = Ken.load(this, R.raw.goodschool,1); 
    challengeId = Ken.load(this, R.raw.challenge,1); 
    frontId = Ken.load(this, R.raw.front,1); 
    driverId = Ken.load(this, R.raw.driver,1); 
    roadId = Ken.load(this, R.raw.road,1); 
    tiesId = Ken.load(this, R.raw.ties,1); 
    noId = Ken.load(this, R.raw.no,1); 

    Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar); 
    mDrawerLayout = (DrawerLayout)findViewById(R.id.drawer); 
    mDrawerList = (ListView)findViewById(android.R.id.list); 
    mDrawerListItems = getResources().getStringArray(R.array.drawer_list); 
    mDrawerList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mDrawerListItems)); 
    mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      switch(position) { 
       case 0: 
        Intent i = new Intent(MainActivity.this, MrsClubb.class); 
        startActivity(i); 
        break; 
       case 1: 
        Intent ii = new Intent(MainActivity.this, MainActivity.class); 
        startActivity(ii); 
        break; 
       case 2: 
        Intent iii = new Intent(MainActivity.this, MrSmith.class); 
        startActivity(iii); 
        break; 
      } 
      mDrawerLayout.closeDrawer(mDrawerList); 

     } 
    }); 
    mDrawerToggle = new ActionBarDrawerToggle(this, 
      mDrawerLayout, 
      toolbar, 
      R.string.drawer_open, 
      R.string.drawer_close){ 
     public void onDrawerClosed(View v){ 
      super.onDrawerClosed(v); 
      invalidateOptionsMenu(); 
      syncState(); 
     } 
     public void onDrawerOpened(View v){ 
      super.onDrawerOpened(v); 
      invalidateOptionsMenu(); 
      syncState(); 
     } 
    }; 
    mDrawerLayout.setDrawerListener(mDrawerToggle); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    getSupportActionBar().setHomeButtonEnabled(true); 
    mDrawerToggle.syncState(); 
} 

@Override 
protected void onPostCreate(Bundle savedInstanceState){ 
    super.onPostCreate(savedInstanceState); 
    mDrawerToggle.syncState(); 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig){ 
    super.onConfigurationChanged(newConfig); 
    mDrawerToggle.onConfigurationChanged(newConfig); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item){ 
    switch (item.getItemId()){ 
     case android.R.id.home: { 
      if (mDrawerLayout.isDrawerOpen(mDrawerList)){ 
       mDrawerLayout.closeDrawer(mDrawerList); 
      } else { 
       mDrawerLayout.openDrawer(mDrawerList); 
      } 
      return true; 
     } 
     default: return super.onOptionsItemSelected(item); 
    } 
} 

public void playSound11(View view) {Ken.play(goodschoolId, 1, 1, 1, 0, 1);} 
public void playSound12(View view) {Ken.play(challengeId, 1, 1, 1, 0, 1);} 
public void playSound13(View view) {Ken.play(frontId, 1, 1, 1, 0, 1);} 
public void playSound14(View view) {Ken.play(driverId, 1, 1, 1, 0, 1);} 
public void playSound15(View view) {Ken.play(roadId, 1, 1, 1, 0, 1);} 
public void playSound16(View view) {Ken.play(tiesId, 1, 1, 1, 0, 1);} 
public void playSound17(View view) {Ken.play(noId, 1, 1, 1, 0, 1);} 

} 

代码为崩溃的活动(几乎与上述相同只是不同的声音池和音频文件的称呼)

activitymain.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".MyActivity" 
android:orientation="vertical" 
xmlns:app="http://schemas.android.com/apk/res-auto"> 

<android.support.v7.widget.Toolbar 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="?attr/actionBarSize" 
    android:background="@color/primary" 
    app:theme="@style/ToolbarTheme" 
    app:popupTheme="@style/Theme.AppCompat"/> 

<android.support.v4.widget.DrawerLayout 
    android:id="@+id/drawer" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@mipmap/kenned" 
     > 

     <Button 
      android:layout_width="280dp" 
      android:layout_height="60dp" 
      android:onClick="playSound11" 
      android:id="@+id/button1" 
      android:background="@drawable/custombtn11" 


      android:layout_marginTop="61dp" 
      android:layout_alignParentTop="true" 
      android:layout_alignParentEnd="true" /> 
     <Button 
      android:layout_width="270dp" 
      android:layout_height="40dp" 
      android:background="@drawable/custombtn12" 
      android:onClick="playSound12" 
      android:id="@+id/button2" 
      android:layout_below="@+id/button1" 
      android:layout_alignParentEnd="true" 

      /> 
     <Button 
      android:layout_width="260dp" 
      android:layout_height="39dp" 
      android:background="@drawable/custombtn13" 
      android:onClick="playSound13" 
      android:id="@+id/button3" 
      android:layout_below="@+id/button2" 
      android:layout_alignParentEnd="true" 

      /> 
     <Button 
      android:layout_width="330dp" 
      android:layout_height="65dp" 
      android:background="@drawable/custombtn14" 
      android:onClick="playSound14" 
      android:id="@+id/button4" 
      android:layout_below="@+id/button3" 
      android:layout_alignParentEnd="true" 

      /> 
     <Button 
      android:layout_width="180dp" 
      android:layout_height="40dp" 
      android:background="@drawable/custombtn15" 
      android:onClick="playSound15" 
      android:id="@+id/button5" 
      android:layout_below="@+id/button4" 
      android:layout_alignParentEnd="true" 

      /> 
     <Button 
      android:layout_width="300dp" 
      android:layout_height="65dp" 
      android:background="@drawable/custombtn16" 
      android:onClick="playSound16" 
      android:id="@+id/button6" 
      android:layout_below="@+id/button5" 
      android:layout_alignParentEnd="true" 

      /> 

     <Button 
      android:layout_width="120dp" 
      android:layout_height="40dp" 
      android:background="@drawable/custombtn18" 
      android:onClick="playSound17" 
      android:id="@+id/button8" 
      android:layout_below="@+id/button6" 
      android:layout_alignParentEnd="true" 

      /> 


    </RelativeLayout> 
    <ListView 
     android:id="@android:id/list" 
     android:background="@android:color/white" 
     android:layout_width="305dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start"/> 
</android.support.v4.widget.DrawerLayout> 


</LinearLayout> 

崩溃xml的活动代码与除了不同的按钮和背景之外的主要活动xml几乎相同。

XML为mrsmith:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".MyActivity" 
android:orientation="vertical" 
xmlns:app="http://schemas.android.com/apk/res-auto"> 

<android.support.v7.widget.Toolbar 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="?attr/actionBarSize" 
    android:background="@color/primary" 
    app:theme="@style/ToolbarTheme" 
    app:popupTheme="@style/Theme.AppCompat"/> 

<android.support.v4.widget.DrawerLayout 
    android:id="@+id/drawer" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@mipmap/smithee"> 


     <Button 
      android:layout_width="170dp" 
      android:layout_height="100dp" 
      android:background="@drawable/custombtn23" 
      android:onClick="playSound19" 
      android:id="@+id/button16" 
      android:layout_alignParentTop="true" 
      android:layout_alignParentStart="true" /> 
     <Button 
      android:layout_width="170dp" 
      android:layout_height="100dp" 
      android:background="@drawable/custombtn24" 
      android:onClick="playSound20" 
      android:id="@+id/button17" 
      android:layout_alignParentTop="true" 
      android:layout_alignParentEnd="true" /> 
     <Button 
      android:layout_width="170dp" 
      android:layout_height="100dp" 
      android:background="@drawable/custombtn22" 
      android:onClick="playSound18" 
      android:id="@+id/button15" 
      android:layout_below="@+id/button17" 
      android:layout_alignParentEnd="true" /> 
     <Button 
      android:layout_width="170dp" 
      android:layout_height="100dp" 
      android:background="@drawable/custombtn27" 
      android:onClick="playSound23" 
      android:id="@+id/button20" 
      android:layout_below="@+id/button16" 
      android:layout_alignParentStart="true" /> 
     <Button 
      android:layout_width="170dp" 
      android:layout_height="100dp" 
      android:background="@drawable/custombtn25" 
      android:onClick="playSound21" 
      android:id="@+id/button18" 
      android:layout_below="@+id/button20" 
      android:layout_alignParentStart="true" /> 
     <Button 
      android:layout_width="170dp" 
      android:layout_height="100dp" 
      android:background="@drawable/custombtn26" 
      android:onClick="playSound22" 
      android:id="@+id/button19" 
      android:layout_below="@+id/button15" 
      android:layout_alignStart="@+id/button15" /> 
     <Button 
      android:layout_width="170dp" 
      android:layout_height="100dp" 
      android:background="@drawable/custombtn28" 
      android:onClick="playSound24" 
      android:id="@+id/button21" 
      android:layout_below="@+id/button18" 
      android:layout_alignParentStart="true" /> 
     <Button 
      android:layout_width="170dp" 
      android:layout_height="100dp" 
      android:background="@drawable/custombtn29" 
      android:onClick="playSound25" 
      android:id="@+id/button22" 
      android:layout_alignTop="@+id/button21" 
      android:layout_alignStart="@+id/button19" /> 
     <Button 
      android:layout_width="170dp" 
      android:layout_height="100dp" 
      android:background="@drawable/custombtn30" 
      android:onClick="playSound26" 
      android:id="@+id/button23" 
      android:layout_below="@+id/button21" 
      android:layout_centerHorizontal="true" /> 

    </RelativeLayout> 
    <ListView 
     android:id="@android:id/list" 
     android:background="@android:color/white" 
     android:layout_width="305dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start"/> 
</android.support.v4.widget.DrawerLayout> 


</LinearLayout> 

如果您需要任何更多的代码,让我知道。我不确定问题是什么。

+0

你可以发布'MrSmith'类的XML吗? – 2015-03-31 09:56:53

+0

@Zygotelnit检查我的编辑问题 – 2015-03-31 10:01:22

+0

你能告诉我什么是在“MrSmith”类的XML文件的第85行吗? – 2015-03-31 10:04:27

回答

0

事实上,问题似乎是模拟器RAM的尺寸较小。您在导航抽屉中使用了一些重型绘图板作为您的Button的背景。由于其中一个大尺寸图像,因此RAM的可用性较低,因此OutOfMemory错误似乎被抛出。

转到AVD管理器,并将RAM的大小增加到至少512 MB,然后再次尝试运行该应用程序。也可以尝试在真实设备上进行测试(如果有)。

相关问题