跳过了49帧!应用程序可能在主线程上做了太多的工作

13 浏览
0 Comments

跳过了49帧!应用程序可能在主线程上做了太多的工作

在我的viewpager实现中,我正在充气Views(而不是fragments)。我的主要类扩展了Activity。\n当我尝试在我的应用程序中滑动屏幕时,我遇到了这个错误,它显示在CustomPagerAdapter.java的第47行:\n以及\n01-04 16:44:35.5278614-8614/com.parsizabanan.app W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x4195ee48)\n01-04 16:44:35.5278614-8614/com.parsizabanan.app E/AndroidRuntime﹕ FatAL EXCEPTION: main\nProcess: com.parsizabanan.app, PID: 8614\nandroid.view.InflateException: Binary XML file line #6: Error inflating class \nat android.view.LayoutInflater.createView(LayoutInflater.java:620)\nat com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInfl ater.java:56)\nat android.view.LayoutInflater.onCreateView(LayoutInflater.java:669)\nat android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694)\nat android.view.LayoutInflater.rInflate(LayoutInflater.java:755)\nat android.view.LayoutInflater.inflate(LayoutInflater.java:492)\nat android.view.LayoutInflater.inflate(LayoutInflater.java:397)\nat android.view.LayoutInflater.inflate(LayoutInflater.java:353)\nat com.parsizabanan.app.CustomPagerAdapter.instantiateItem(CustomPagerAdapter.java:47)\nat android.support.v4.view.PagerAdapter.instantiateItem(PagerAdapter.java:110)\nat android.support.v4.view.ViewPager.addNewItem(ViewPager.java:837)\nat android.support.v4.view.ViewPager.populate(ViewPager.java:1021)\nat android.support.v4.view.ViewPager.populate(ViewPager.java:919)\nat android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1441)\nat android.view.View.measure(View.java:16574)\nat android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:719)\nat android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455)\nat android.view.View.measure(View.java:16574)\nat android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5140)\nat android.widget.FrameLayout.onMeasure(FrameLayout.java:310)\nat android.view.View.measure(View.java:16574)\nat android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5140)\nat android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1406)\nat android.widget.LinearLayout.measureVertical(LinearLayout.java:697)\nat android.widget.LinearLayout.onMeasure(LinearLayout.java:590)\nat android.view.View.measure(View.java:16574)\nat android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5140)\nat android.widget.FrameLayout.onMeasure(FrameLayout.java:310)\nat com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2421)\nat android.view.View.measure(View.java:16574)\nat android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1955)\nat android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1151)\nat android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1333)\nat android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1038)\nat android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5890)\nat android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)\nat android.view.Choreographer.doCallbacks(Choreographer.java:574)\nat android.view.Choreographer.doFrame(Choreographer.java:544)\nat android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)\nat android.os.Handler.handleCallback(Handler.java:733)\nat android.os.Handler.dispatchMessage(Handler.java:95)\nat android.os.Looper.loop(Looper.java:136)\nat android.app.ActivityThread.main(ActivityThread.java:5118)\nat java.lang.reflect.Method.invokeNative(Native Method)\nat java.lang.reflect.Method.invoke(Method.java:515)\nat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)\nat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:610)\nat dalvik.system.NativeStart.main(Native Method)\nCaused by: java.lang.reflect.InvocationTargetException\nat java.lang.reflect.Constructor.constructNative(Native Method)\nat java.lang.reflect.Constructor.newInstance(Constructor.java:423)\nat android.view.LayoutInflater.createView(LayoutInflater.java:594)\nat com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInfl ater.java:56)\nat android.view.LayoutInflater.onCreateView(LayoutInflater.java:669)\nat android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694)\nat android.view.LayoutInflater.rInflate(LayoutInflater.java:755)\nat android.view.LayoutInflater.inflate(LayoutInflater.java:492)\nat android.view.LayoutInflater.inflate(LayoutInflater.java:397)\nat android.view.LayoutInflater.inflate(LayoutInflater.java:353)\nat com.parsizabanan.app.CustomPagerAdapter.instantiateItem(CustomPagerAdapter.java:47)\nat android.support.v4.view.PagerAdapter.instantiateItem(PagerAdapter.java:110)\nat android.support.v4.view.ViewPager.addNewItem(ViewPager.java:837)\nat android.support.v4.view.ViewPager.populate(ViewPager.java:1021)\nat android.support.v4.view.ViewPager.populate(ViewPager.java:919)\nat android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1441)\nat android.view.View.measure(View.java:16574)\nat android.widget.RelativeLayout.measureChildHorizontal(Rel ativeLayout.java:719)\nat android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455)\nat android.view.View.measure(View.java:16574)\nat android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5140)\nat android.widget.FrameLayout.onMeasure(FrameLayout.java:310)\nat android.view.View.measure(View.java:16574)\nat android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5140)\nat android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1406)\nat android.widget.LinearLayout.measureVertical(LinearLayout.java:697)\nat android.widget.LinearLayout.onMeasure(LinearLayout.java:590)\nat android.view.View.measure(View.java:16574)\nat android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5140)\nat android.widget.FrameLayout.onMeasure(FrameLayout.java:310)\nat com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2421)\nat android.view.View.measure(View.java:16574)\nat android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1955)\nat android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1151)\nat android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1333)\nat android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1038)\nat android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5890)\nat android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)\nat android.view.Choreographer.doCallbacks(Choreographer.java:574)\nat android.view.Choreographer.doFrame(Choreographer.java:544)\nat android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)\nat android.os.Handler.handleCallback(Handler.java:733)\nat android.os.Handler.dispatchMessage(Handler.java:95)\nat android.os.Looper.loop(Looper.java:136)\nat android.app.ActivityThread.main(ActivityThread.java:5118)\nat java.lang.reflect.Method.invokeNative(Native Method)\nat java.lang.reflect.Method.invoke(Method.java:515)\nat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)\nat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:610)\nat dalvik.system.NativeStart.main(Native Method)\nCaused by: java.lang.OutOfMemoryError\nat android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)\nat android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:587)\nat android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:422)\nat android.graphics.drawable.Drawable.cre ateFromResourceStream(Drawable.java:840)\nat android.content.res.Resources.loadDrawable(Resources.java:2150)\n\nCustomPagerAdapter:\n

public class CustomPagerAdapter extends PagerAdapter {
public Object instantiateItem(View collection, int position) {
    LayoutInflater inflater = (LayoutInflater) collection.getContext()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    int resId = 0;
    switch (position) {
        case 0: {
            resId = R.layout.lab;
            break;
        }
        case 1: {
            resId = R.layout.lab;
            break;
        }
        case 2: {
            resId = R.layout.etela;
            break;
        }
        case 3: {
            resId = R.layout.ticket;
            break;
        }
        case 4: {
            resId = R.layout.product;
            break;
        }
        case 5: {
            resId = R.layout.about;
            break;
        }
    }
    View view = inflater.inflate(resId, null);
    ((ViewPager) collection).addView(view, 0);
    return view;
}
@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
    ((ViewPager) arg0).removeView((View) arg2);
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
    return arg0 == ((View) arg1);
}
@Override
public Parcelable saveState() {
    return null;
}
@Override
public int getCount() {
    return 6;
}

\nMyActivity:\n

public class MyActivity extends Activity {
ViewPager myPager = null;
ImageButton contact = null;
ImageButton about = null;
ImageButton lab = null;
ImageButton product = null;
ImageButton ticket = null;
ImageButton etela = null;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    CustomPagerAdapter adapter = new CustomPagerAdapter();
    myPager = (ViewPager) findViewById(R.id.customviewpager);
    myPager.setAdapter(adapter);
    myPager.setCurrentItem(5);
    myPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        public void onPageScrolled(int i, float v, int i2) {
        }
        public void onPageSelected(int i) {
        }
        public void onPageScrollStateChanged(int i) {
            Thread t1 = new Thread(new Runnable() {
                @Override
                public void run() {
                    switch (myPager.getCurrentItem()) {
                        case 0:
                            break;
                        case 1:
                            break;
                        case 2:
                            break;
                        case 3:
                            break;
                        case 4:
                            break;
                        case 5:
                            break;
                    }
                }
            });
            t1.start();
        }
    });
}

\n并且这是lab layout:\n





0
0 Comments

Skipped 49 frames! The application may be doing too much work on its main thread这个问题的出现的原因是使用大尺寸的图片可能会导致内存消耗过大,从而引发该错误。解决方法是建议减小图片的尺寸,然后再加载到ImageView中。另外,还可以通过在清单文件中添加android:largeHeap="true"来请求Android为应用程序提供更多的内存,但这种方法并不被推荐使用。具体的信息可参考这里这里


...

以上就是对Skipped 49 frames! The application may be doing too much work on its main thread问题的原因和解决方法的整理。

0