Android 引发Nativescript doInBackground并导致OutOfMemory错误

Android 引发Nativescript doInBackground并导致OutOfMemory错误,android,performance,error-handling,out-of-memory,nativescript,Android,Performance,Error Handling,Out Of Memory,Nativescript,我是nativescript的新手,大约几个月后就开始开发程序了。我得到了同样的错误,我正在使用radList视图和Web图像缓存插件。我们有一个api,用于发送产品及其图像和500kb左右的图像。我从他们的类别中创建标签,在类别中,我为每个类别创建一个列表视图,并在其中列出产品。我的代码是这样的 var tabView = page.getViewById("tabViewContainer"); var meal_list = config.meal_list;

我是nativescript的新手,大约几个月后就开始开发程序了。我得到了同样的错误,我正在使用radList视图和Web图像缓存插件。我们有一个api,用于发送产品及其图像和500kb左右的图像。我从他们的类别中创建标签,在类别中,我为每个类别创建一个列表视图,并在其中列出产品。我的代码是这样的

var tabView = page.getViewById("tabViewContainer");
    var meal_list = config.meal_list;
    meal_list.forEach(function (item) {
        var items = new observable_array_1.ObservableArray();
        item.meal_list.forEach(function (item2) {
            items.push(new DataItemWithImage(item2.meal_id, item2.meal_name, item2.meal_cost,"http://sezginserpen.com.tr/test_image/" + item2.meal_id + ".jpg"));
          //  items.push(new DataItemWithImage(item2.meal_id, item2.meal_name, item2.meal_cost,"http://pngimg.com/upload/pizza_PNG7132.png"));
        });
        var wrapLayout = new wrapLayoutModule.WrapLayout();
        var radListView = new listViewModule.RadListView();
        var layoutBase = new listViewModule.ListViewGridLayout();
        layoutBase.scrollDirection = "Vertical";
        layoutBase.spanCount = 2;
        wrapLayout.className = "item";
        wrapLayout.orientation = "horizontal";
        radListView.listViewLayout = layoutBase;
        radListView.items = items;//<IC:WebImage stretch="fill" height="250" class="my-image-1" src="{{ image }}></IC:WebImage>
        radListView.itemTemplate = '<Border xmlns:IC="nativescript-web-image-cache"  borderWidth="0.5" borderColor="lightgray"><stack-layout orientation="vertical" height="250" ><IC:WebImage horizontalAlignment="center"  src="{{ image }}"></IC:WebImage><stack-layout  width="100%" height="50%"> <label id="product_id_label" text="{{ id }}" style="visibility: collapsed" /><label class="align_center product_label" textWrap="true"  text="{{ itemName }}" /> <label class="align_center product_label" textWrap="true" style="color:lightgray" text="{{ itemDescription }}" /> <Border  borderWidth="1" borderColor="green" borderRadius="2" style="height:22%;width:95%"> <label tap="add_to_basket" class="align_center" style="background-color:white;color:green;" text="Sepete Ekle" /> </Border> </stack-layout> </stack-layout> </Border>';
        wrapLayout.addChild(radListView);
        var tabViewItem = new tabViewModule.TabViewItem();
        tabViewItem.title = item.category.category_name,
            tabViewItem.view = wrapLayout;
        var tabView = page.getViewById("tabViewContainer");
        tabView.items.push(tabViewItem);
    });
跟踪2:

java.lang.OutOfMemoryError: Failed to allocate a 1508364 byte allocation with 301952 free bytes and 294KB until OOM
    at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
    at android.graphics.Bitmap.nativeCreate(Native Method)
    at android.graphics.Bitmap.createBitmap(Bitmap.java:975)
    at android.graphics.Bitmap.createBitmap(Bitmap.java:946)
    at android.graphics.Bitmap.createBitmap(Bitmap.java:913)
    at com.facebook.imagepipeline.memory.BitmapPool.alloc(BitmapPool.java:55)
    at com.facebook.imagepipeline.memory.BitmapPool.alloc(BitmapPool.java:30)
    at com.facebook.imagepipeline.memory.BasePool.get(BasePool.java:259)
    at com.facebook.imagepipeline.platform.ArtDecoder.decodeStaticImageFromStream(ArtDecoder.java:137)
    at com.facebook.imagepipeline.platform.ArtDecoder.decodeFromEncodedImage(ArtDecoder.java:81)
    at com.facebook.imagepipeline.decoder.ImageDecoder.decodeStaticImage(ImageDecoder.java:128)
    at com.facebook.imagepipeline.decoder.ImageDecoder.decodeImage(ImageDecoder.java:94)
    at com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder.doDecode(DecodeProducer.java:194)
    at com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder.access$200(DecodeProducer.java:97)
    at com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder$1.run(DecodeProducer.java:129)
    at com.facebook.imagepipeline.producers.JobScheduler.doJob(JobScheduler.java:207)
    at com.facebook.imagepipeline.producers.JobScheduler.access$000(JobScheduler.java:27)
    at com.facebook.imagepipeline.producers.JobScheduler$1.run(JobScheduler.java:78)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
    at com.facebook.imagepipeline.core.PriorityThreadFactory$1.run(PriorityThreadFactory.java:43)
    at java.lang.Thread.run(Thread.java:818)
这是另一个,不涉及这个eror类型,但我也得到了这个:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.bringToFront()' on a null object reference
    at com.telerik.android.primitives.widget.sidedrawer.transitions.DrawerTransitionBase.setProgress(DrawerTransitionBase.java:77)
    at com.telerik.android.primitives.widget.sidedrawer.transitions.DrawerTransitionBase.onEnded(DrawerTransitionBase.java:226)
    at com.telerik.android.primitives.widget.sidedrawer.transitions.DrawerTransitionBase.run(DrawerTransitionBase.java:221)
    at android.view.ViewPropertyAnimator$AnimatorEventListener.onAnimationEnd(ViewPropertyAnimator.java:1119)
    at android.animation.ValueAnimator.endAnimation(ValueAnimator.java:1239)
    at android.animation.ValueAnimator$AnimationHandler.doAnimationFrame(ValueAnimator.java:766)
    at android.animation.ValueAnimator$AnimationHandler$1.run(ValueAnimator.java:801)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:920)
    at android.view.Choreographer.doCallbacks(Choreographer.java:695)
    at android.view.Choreographer.doFrame(Choreographer.java:628)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:906)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:158)
    at android.app.ActivityThread.main(ActivityThread.java:7229)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
你知道我怎样才能抓住这种错误吗


感谢您的帮助。

下面的示例展示了如何从iOS和Android的NativeScirpt中的TabView中删除选项卡

main-page.xml

<Page xmlns="http://schemas.nativescript.org/tns.xsd" navigatingTo="navigatingTo">
  <TabView id="tabViewContainer" loaded="tabviewLoaded">
      <TabView.items>
          <TabViewItem title="">
              <TabViewItem.view>
                  <Label text="This is Label in Tab 1" />
              </TabViewItem.view>
          </TabViewItem>
          <TabViewItem title="">
              <TabViewItem.view>
                  <Label text="This is Label in Tab 2" />
              </TabViewItem.view>
          </TabViewItem>
      </TabView.items>
  </TabView>
</Page>

下面附带的示例显示了如何在iOS和Android的NativeScirpt中从TabView中删除选项卡

main-page.xml

<Page xmlns="http://schemas.nativescript.org/tns.xsd" navigatingTo="navigatingTo">
  <TabView id="tabViewContainer" loaded="tabviewLoaded">
      <TabView.items>
          <TabViewItem title="">
              <TabViewItem.view>
                  <Label text="This is Label in Tab 1" />
              </TabViewItem.view>
          </TabViewItem>
          <TabViewItem title="">
              <TabViewItem.view>
                  <Label text="This is Label in Tab 2" />
              </TabViewItem.view>
          </TabViewItem>
      </TabView.items>
  </TabView>
</Page>

这个问题可能是由于在listview中加载图像引起的。作为Android的解决方案,您可以使用nativescript fresco-plugin在listview中显示图像。你们可以在这里找到例子——感谢你们的帮助,我已经在使用IC WebCache图像,包括Fresco和另一个用于İOS的插件。我意识到这个错误来自一个名为的插件,当我不使用这个插件时,即使是大图片也没有错误。仅因大图像(例如4mb或更大)而出现错误:)您知道slider的其他插件吗?我找不到其他类似于
nativescript slides
的插件。我不确定这是否适用于您的项目,但是您可以使用
选项卡视图
,它也支持在页面之间滑动。我发现一个NativeScript社区成员制作了类似于
NativeScript幻灯片
的插件。您可以在这里找到工作示例-,但是该示例目前仅适用于ios。哦,您的兴趣爱好ı将在net time试用,是否有隐藏选项卡视图选项卡标题的方法?可能是由于在listview中加载图像导致了此问题。作为Android的解决方案,您可以使用nativescript fresco-plugin在listview中显示图像。你们可以在这里找到例子——感谢你们的帮助,我已经在使用IC WebCache图像,包括Fresco和另一个用于İOS的插件。我意识到这个错误来自一个名为的插件,当我不使用这个插件时,即使是大图片也没有错误。仅因大图像(例如4mb或更大)而出现错误:)您知道slider的其他插件吗?我找不到其他类似于
nativescript slides
的插件。我不确定这是否适用于您的项目,但是您可以使用
选项卡视图
,它也支持在页面之间滑动。我发现一个NativeScript社区成员制作了类似于
NativeScript幻灯片
的插件。您可以在这里找到工作示例-,但是该示例目前仅适用于ios。哦,如果您感兴趣,请尝试net time,是否有隐藏tabi view tabi标题的方法?我尝试了这个方法,并且效果很好,但有时在android.os.AsyncTask$3.done的doInBackground()中再次出现错误(AsyncTask.java:309)像这样,İ无法解决它:(我尝试了这个方法,效果很好,但有时我会在android.os.AsyncTask$3.done(AsyncTask.java:309)的doInBackground()中再次出错,就像这样,İ无法解决它:(
<Page xmlns="http://schemas.nativescript.org/tns.xsd" navigatingTo="navigatingTo">
  <TabView id="tabViewContainer" loaded="tabviewLoaded">
      <TabView.items>
          <TabViewItem title="">
              <TabViewItem.view>
                  <Label text="This is Label in Tab 1" />
              </TabViewItem.view>
          </TabViewItem>
          <TabViewItem title="">
              <TabViewItem.view>
                  <Label text="This is Label in Tab 2" />
              </TabViewItem.view>
          </TabViewItem>
      </TabView.items>
  </TabView>
</Page>
  import { EventData } from "data/observable";
    import { Page } from "ui/page";
    import {TabView} from "ui/tab-view";
    import {isAndroid, isIOS} from "platform"



    export function tabviewLoaded(args:EventData){

        var tabview =<any> args.object;

         if(isAndroid){
            var tabViewgrid = tabview._grid;
            console.dump(tabViewgrid.removeViewAt(0));
         }

         if(isIOS){
            tabview._ios.tabBar.hidden = true;
         }
    }
var platform_1 = require("platform");
function tabviewLoaded(args) {
    var tabview = args.object;
    if (platform_1.isAndroid) {
        var tabViewgrid = tabview._grid;
        console.dump(tabViewgrid.removeViewAt(0));
    }
    if (platform_1.isIOS) {
        tabview._ios.tabBar.hidden = true;
    }
}
exports.tabviewLoaded = tabviewLoaded;