Also habe ich vor kurzem die erste Entwicklung meiner App abgeschlossen. Ich hatte mein Handy (OnePlus 2) die ganze Zeit zum Debuggen benutzt und die Dinge waren im Allgemeinen in Ordnung. Ich habe beschlossen, etwas Hilfe von Freunden und Familie zum Testen der App zu nehmen, und einige haben berichtet, dass die App beim Start abstürzt. Also habe ich das Handy meiner Mutter (Galaxy S5) in die Hand genommen und mich entschieden, den Fehler zu loggen.App stürzt bei einigen Geräten ab | Speicherproblem?
Logcat
04-16 10:23:02.400 3229-3229/? I/Timeline: Timeline: Activity_launch_request id:com.test.drawernav time:3576923
04-16 10:23:02.730 3229-3229/? V/BitmapFactory: DecodeImagePath(decodeResourceStream3) : res/drawable-xxhdpi-v4/abc_ic_ab_back_mtrl_am_alpha.png
04-16 10:23:02.835 3229-3229/? V/BitmapFactory: DecodeImagePath(decodeResourceStream3) : res/drawable/bg.jpg
04-16 10:23:02.885 3229-3229/? I/art: Alloc sticky concurrent mark sweep GC freed 1308(219KB) AllocSpace objects, 5(80KB) LOS objects, 6% free, 118MB/126MB, paused 381us total 23.063ms
04-16 10:23:02.895 3229-3229/? I/art: Clamp target GC heap from 134MB to 128MB
04-16 10:23:02.895 3229-3229/? I/art: Alloc partial concurrent mark sweep GC freed 481(22KB) AllocSpace objects, 0(0B) LOS objects, 7% free, 118MB/128MB, paused 346us total 9.467ms
04-16 10:23:02.915 3229-3229/? I/art: Clamp target GC heap from 134MB to 128MB
04-16 10:23:02.915 3229-3229/? I/art: Alloc concurrent mark sweep GC freed 58(14KB) AllocSpace objects, 0(0B) LOS objects, 7% free, 118MB/128MB, paused 392us total 18.452ms
04-16 10:23:02.915 3229-3229/? I/art: Forcing collection of SoftReferences for 43MB allocation
04-16 10:23:02.935 3229-3229/? I/art: Clamp target GC heap from 134MB to 128MB
04-16 10:23:02.935 3229-3229/? I/art: Alloc concurrent mark sweep GC freed 11(344B) AllocSpace objects, 0(0B) LOS objects, 7% free, 118MB/128MB, paused 521us total 17.392ms
04-16 10:23:02.980 3229-3229/? E/art: Throwing OutOfMemoryError "Failed to allocate a 45619212 byte allocation with 9890668 free bytes and 9MB until OOM"
04-16 10:23:02.980 3229-3229/? D/skia: --- allocation failed for scaled bitmap
04-16 10:23:02.985 3229-3229/? D/AndroidRuntime: Shutting down VM
04-16 10:23:03.010 3229-3229/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.test.drawernav, PID: 3229
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test.drawernav/com.test.drawernav.MainActivity}: android.view.InflateException: Binary XML file line #2: Error inflating class android.support.v4.widget.DrawerLayout
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2658)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723)
at android.app.ActivityThread.access$900(ActivityThread.java:172)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5832)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class android.support.v4.widget.DrawerLayout
at android.view.LayoutInflater.createView(LayoutInflater.java:640)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750)
at android.view.LayoutInflater.inflate(LayoutInflater.java:483)
at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
at android.view.LayoutInflater.inflate(LayoutInflater.java:366)
at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:256)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:109)
at com.test.drawernav.MainActivity.onCreate(MainActivity.java:32)
at android.app.Activity.performCreate(Activity.java:6221)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2611)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723)
at android.app.ActivityThread.access$900(ActivityThread.java:172)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5832)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
at android.view.LayoutInflater.createView(LayoutInflater.java:614)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750)
at android.view.LayoutInflater.inflate(LayoutInflater.java:483)
at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
at android.view.LayoutInflater.inflate(LayoutInflater.java:366)
at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:256)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:109)
at com.test.drawernav.MainActivity.onCreate(MainActivity.java:32)
at android.app.Activity.performCreate(Activity.java:6221)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2611)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723)
at android.app.ActivityThread.access$900(ActivityThread.java:172)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5832)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
Caused by: java.lang.OutOfMemoryError: Failed to allocate a 45619212 byte allocation with 9890668 free bytes and 9MB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:741)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:562)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1014)
at android.content.res.Resources.loadDrawableForCookie(Resources.java:3723)
at android.content.res.Resources.loadDrawable(Resources.java:3596)
at android.content.res.TypedArray.getDrawable(TypedArray.java:750)
at android.view.View.<init>(View.java:3939)
at android.view.ViewGroup.<init>(ViewGroup.java:511)
at android.view.ViewGroup.<init>(ViewGroup.java:507)
at android.support.v4.widget.DrawerLayout.<init>(DrawerLayout.java:351)
at android.support.v4.widget.DrawerLayout.<init>(DrawerLayout.java:347)
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
at android.view.LayoutInflater.createView(LayoutInflater.java:614)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750)
at android.view.LayoutInflater.inflate(LayoutInflater.java:483)
at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
at android.view.LayoutInflater.inflate(LayoutInflater.java:366)
at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:256)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:109)
at com.test.drawernav.MainActivity.onCreate(MainActivity.java:32)
at android.app.Activity.performCreate(Activity.java:6221)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2611)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723)
at android.app.ActivityThread.access$900(ActivityThread.java:172)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5832)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
Die Hauptaktivität nach einer Startbild bezeichnet wird (die auf jedem Telefon läuft) wird für 5 Sekunden angezeigt. Die Hauptaktivität enthält eine Navigationsleiste, um die die gesamte Anwendung entworfen wurde.
MainActivity.java
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {
private ActionBarDrawerToggle drawerToggle;
private ActionBar actionBar;
private DrawerLayout drawerLayout;
private ListView navList;
private FragmentTransaction fragmentTransaction;
private FragmentManager fragmentManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
navList = (ListView) findViewById(R.id.navigationdrawer);
ArrayList<String> navArray = new ArrayList<String>();
navArray.add("Home");
navArray.add("About Us");
navArray.add("Our Work");
navArray.add("Locate Us");
navArray.add("Contact Us");
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_activated_1,
navArray);
navList.setAdapter(adapter);
navList.setOnItemClickListener(this);
navList.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.open_drawer, R.string.close_drawer);
drawerLayout.setDrawerListener(drawerToggle);
actionBar = getSupportActionBar();
assert getSupportActionBar() != null;
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowHomeEnabled(true);
fragmentManager = getSupportFragmentManager();
fragmentTransaction = fragmentManager.beginTransaction();
loadSelection(0);
}
private void loadSelection(int i){
navList.setItemChecked(i, true);
switch (i){
case 0:
HomeFragment homeFragment = new HomeFragment();
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragmentholder, homeFragment)
.commit();
break;
case 1:
AboutUsFragment aboutUsFragment = new AboutUsFragment();
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragmentholder, aboutUsFragment)
.commit();
break;
case 2:
HelplineFragment ourWorkFragment = new OurWorkFragment();
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragmentholder, ourWorkFragment)
.commit();
break;
case 3:
LocateFragment locateFragment = new LocateFragment();
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragmentholder, locateFragment)
.commit();
break;
case 4:
LocateFragment contactFragment = new ContactUsFragment();
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragmentholder, contactFragment)
.commit();
break;
}
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
drawerToggle.syncState();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
if (drawerLayout.isDrawerOpen(navList)) {
drawerLayout.closeDrawer(navList);
} else {
drawerLayout.openDrawer(navList);
}
}
return super.onOptionsItemSelected(item);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
loadSelection(position);
drawerLayout.closeDrawer(navList);
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
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"
android:id="@+id/drawerLayout"
android:background="@drawable/bg"
>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/fragmentholder"> </FrameLayout>
<ListView
android:layout_width="240dp"
android:layout_height="match_parent"
android:id="@+id/navigationdrawer"
android:layout_gravity="start"
android:background="#ccddccdd"
></ListView>
</android.support.v4.widget.DrawerLayout>
HomeFragment.java
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.ViewFlipper;
public class HomeFragment extends Fragment {
// ViewFlipper topFlipper;
ViewFlipper bottomFlipper;
public HomeFragment() {
// Required empty public constructor
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.fragment_home, container, false);
TextView textView = (TextView)view.findViewById(R.id.home_fragment_text);
bottomFlipper = (ViewFlipper)view.findViewById(R.id.bottomFlipper);
bottomFlipper.setAutoStart(true);
bottomFlipper.setFlipInterval(2000);
bottomFlipper.startFlipping();
return view;
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public void onDetach() {
super.onDetach();
}
}
fragment_home.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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="com.test.drawernav.HomeFragment">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_marginTop="10dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginBottom="10dp"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:id="@+id/home_fragment_text"
android:text="@string/home_fragment_text"
android:textSize="27sp"
/>
<ViewFlipper
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_gravity="bottom"
android:layout_weight="2"
android:id="@+id/bottomFlipper">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/bottomFlipper1"
android:src="@drawable/flipper1"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/bottomFlipper2"
android:src="@drawable/flipper2"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/bottomFlipper3"
android:src="@drawable/flipper3"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/bottomFlipper4"
android:src="@drawable/flipper4"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/bottomFlipper5"
android:src="@drawable/flipper5"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/bottomFlipper6"
android:src="@drawable/flipper6"/>
</ViewFlipper>
</LinearLayout>
</FrameLayout>
Es hat etwas mit Speicherzuweisung zu tun ist, was ich zusammentrage, aber ich habe keine Ahnung, wie man es beheben kann.
Sieht aus wie das Bild, das Sie einstellen, da der Hintergrund des 'DrawerLayout' zu groß ist. –
http://developer.android.com/training/displaying-bitmaps/load-bitmap.html –
Wenn Sie versuchen, schwere Bild in Bezug auf Größe/Auflösung –