Binder事务文本文件失败

时间:2012-05-27 17:57:19

标签: android android-binder

我必须从96000字节的文本文件中读取一些数据,以便我可以绘制一条线图。我试图读取每2个字节并将它们组合成2个字节然后我制作8个数组,每个6000个整数。但我有上述错误! 如果我尝试只使用1,2或3个数组它可以工作,但是从4个数组不能

有人可以帮助我,看看我做错了什么。 我从昨天开始阅读不同的讨论,并没有真正看到任何适当的答案。 我得到的是它是内存/堆的问题。

这是我的代码。

byte LSB;
     byte MSB;
    public  Intent getIntent(Context context) throws IOException{
        InputStream data_in ;

            data_in = context.getAssets().open("demodta.txt");

             int[] x = new int[6000]; // x values
             int[] y1= new int[6000]; // y1 values
             int[] y2= new int[6000]; // y2 values
             int[] y3= new int[6000]; // y3 values
             int[] y4= new int[6000]; // y4 values
             int[] y5= new int[6000]; // y5 values
             int[] y6= new int[6000]; // y6 values
             int[] y7= new int[6000]; // y7 values
             int[] y8= new int[6000]; // y8 values  
             int i =0;


//      while(true) {
    int j=0;
         try {

         int size = data_in.available();
         byte[] buffer = new byte[size];
         data_in.read(buffer);

             for( i=0;i<12000;i=i+2){                
                 LSB =  buffer[i];
                 MSB = buffer[i+1];
                  int current= ((MSB<<8)| (LSB & 0xFF));
                y1[j]=  current;
                j++;
              }
                j=0;
             for(i=12000;i<24000;i=i+2){
                LSB =  buffer[i];
                MSB = buffer[i+1];
                int current= ((MSB<<8)| (LSB & 0xFF));
                y2[j]=  current;
                j++;
              }
             j=0;
             for(i=24000;i<36000;i=i+2){
                LSB =  buffer[i];
                 MSB = buffer[i+1];
                 int current= ((MSB<<8)| (LSB & 0xFF));
                 y3[j]=  current;
                 j++;
               }
             j=0;
             for(i=36000;i<48000;i=i+2){
                LSB =  buffer[i];
                 MSB = buffer[i+1];
                 int current= ((MSB<<8)| (LSB & 0xFF));
                 y4[j]=  current;
                 j++;
               }
             j=0;
             for(i=48000;i<60000;i=i+2){
                LSB =  buffer[i];
                 MSB = buffer[i+1];
                 int current= ((MSB<<8)| (LSB & 0xFF));
                 y5[j]=  current;
                 j++;
               }
             j=0;
             for(i=60000;i<72000;i=i+2){
                LSB =  buffer[i];
                 MSB = buffer[i+1];
                 int current= ((MSB<<8)| (LSB & 0xFF));
                 y6[j]=  current;
                 j++;
               }
             j=0;
             for(i=72000;i<84000;i=i+2){
                LSB =  buffer[i];
                 MSB = buffer[i+1];
                 int current= ((MSB<<8)| (LSB & 0xFF));
                 y7[j]=  current;
                 j++;
               }
             j=0;
             for(i=84000;i<96000;i=i+2){
                LSB =  buffer[i];
                 MSB = buffer[i+1];
                 int current= ((MSB<<8)| (LSB & 0xFF));
                 y8[j]=  current;
                 j++;
               }
         }

 for(int k=0;k<6000;k++){
     x[k]=k;
    }

        TimeSeries series1 = new TimeSeries("line1");
        for(int k=0;k<x.length;k++){
            series1.add(x[k], y1[k]);
        }
        TimeSeries series2 = new TimeSeries("line2");
        for(int k=0;k<x.length;k++){
            series2.add(x[k], y2[k]);
        }
        TimeSeries series3 = new TimeSeries("line3");
        for(int k=0;k<x.length;k++){
            series3.add(x[k], y3[k]);
        }
        TimeSeries series4 = new TimeSeries("line4");
        for(int k=0;k<x.length;k++){
            series4.add(x[k], y4[k]);
        }
        TimeSeries series5 = new TimeSeries("line5");
        for(int k=0;k<x.length;k++){
            series5.add(x[k], y5[k]);
        }
        TimeSeries series6 = new TimeSeries("line6");
        for(int k=0;k<x.length;k++){
            series6.add(x[k], y6[k]);
        }
        TimeSeries series7 = new TimeSeries("line7");
        for(int k=0;k<x.length;k++){
            series7.add(x[k], y7[k]);
        }
        TimeSeries series8 = new TimeSeries("line8");
        for(int k=0;k<x.length;k++){
            series8.add(x[k], y8[k]);
        }

这是我的MainActivity

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button strt = (Button) findViewById(R.id.LineGraph);

        strt.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                lineGraph line = new lineGraph();

                Intent lineIntent = null;
                try {
                    lineIntent = line.getIntent(getBaseContext());
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }


                startActivity(lineIntent);

            }
        });
    }

我的LogCat提供以下输出:

05-27 19:39:00.180: D/dalvikvm(5556): GC_FOR_ALLOC freed 0K, 10% free 14410K/15879K, paused 68ms
05-27 19:39:00.750: D/dalvikvm(5556): GC_FOR_ALLOC freed 961K, 16% free 13452K/15879K, paused 72ms
05-27 19:39:00.830: D/dalvikvm(5556): GC_FOR_ALLOC freed 0K, 10% free 14348K/15879K, paused 77ms
05-27 19:39:00.830: I/dalvikvm-heap(5556): Grow heap (frag case) to 14.945MB for 917520-byte allocation
05-27 19:39:00.920: D/dalvikvm(5556): GC_FOR_ALLOC freed 0K, 10% free 15244K/16839K, paused 78ms
05-27 19:39:01.320: D/dalvikvm(5556): GC_FOR_ALLOC freed 1206K, 15% free 14407K/16839K, paused 74ms
05-27 19:39:01.320: I/dalvikvm-heap(5556): Grow heap (frag case) to 15.643MB for 1589467-byte allocation
05-27 19:39:01.410: D/dalvikvm(5556): GC_FOR_ALLOC freed <1K, 14% free 15958K/18439K, paused 73ms
05-27 19:39:01.420: E/JavaBinder(5556): !!! FAILED BINDER TRANSACTION !!!

1 个答案:

答案 0 :(得分:0)

你不能这样做..

 for( i=0;i<12000;i=i+2){ y1[j]= current; j++; }
 TimeSeries series1 = new TimeSeries("line1"); 
for(int k=0;k<x.length;k++){ series1.add(x[k], y1[k]); } 
 for(i=12000;i<24000;i=i+2){ y1[j]= current; j++; }