来自AsyncTask的新活动无法启动

时间:2018-01-30 17:07:07

标签: android android-intent android-activity android-asynctask

我的Async任务按原样运行,我想通过意图将arraylists的对象传递给下一个活动,该活动将更新屏幕并构建一些视图。

我有我的构造函数:

Async(BigDecimal balance, Date SD, Integer Years, BigDecimal CPY, Date fPayDate, BigDecimal Nom, String PF, Context context) {

    this.balance = balance;
    this.SD = SD;
    this.Years = Years;
    this.CPY = CPY;
    this.fPayDate = fPayDate;
    this.Nom = Nom;
    this.PF = PF;
    this.context = context;
}

我尝试传递意图并开始活动:

@Override
protected void onPostExecute(arWrapper wrapper) {
    super.onPostExecute(wrapper);

   this.balAr = wrapper.balAr;
   this.payAr = wrapper.payAr;
   this.intAr = wrapper.intAr;
   this.dateAr = wrapper.dateAr;
   this.prinAr = wrapper.prinAr;

    Intent intent = new Intent(context,scrollTable.class)
            .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.putExtra("balance", new myParcelable(balAr, intAr, dateAr, prinAr, payAr));
    context.startActivity(intent);


}

然后我尝试启动以下活动来创建动态表格布局:

public class scrollTable extends Activity
{


    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        myParcelable object = getIntent().getParcelableExtra("balance");
        ArrayList<BigDecimal> balAr = object.balAr;
        ArrayList<BigDecimal> intAr = object.intAr;
        ArrayList<Calendar> dateAr = object.dateAr;
        ArrayList<BigDecimal> prinAr = object.prinAr;
        ArrayList<BigDecimal> payAr = object.payAr;

        String[] column = { "Payment", "Interest", "Principal",
                "Balance"
        };
        int rl=balAr.size();
        int cl=column.length;

        ScrollView sv = new ScrollView(this);
        TableLayout tableLayout = createTableLayout(dateAr, column,rl, cl, payAr, intAr, prinAr, balAr);
        HorizontalScrollView hsv = new HorizontalScrollView(this);

        hsv.addView(tableLayout);
        sv.addView(hsv);
        setContentView(sv);

    }

    private TableLayout createTableLayout(ArrayList rv, String [] cv,int rowCount, int columnCount, ArrayList pay, ArrayList intr, ArrayList prin, ArrayList bal)
    {
        // 1) Create a tableLayout and its params
        TableLayout.LayoutParams tableLayoutParams = new TableLayout.LayoutParams();
        TableLayout tableLayout = new TableLayout(this);
        tableLayout.setBackgroundColor(Color.BLACK);

        // 2) create tableRow params
        TableRow.LayoutParams tableRowParams = new TableRow.LayoutParams();
        tableRowParams.setMargins(1, 1, 1, 1);
        tableRowParams.weight = 1;

        SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy", Locale.US);

        for (int i = 0; i < rowCount; i++)
        {
            // 3) create tableRow
            TableRow tableRow = new TableRow(this);
            tableRow.setBackgroundColor(Color.BLACK);

            for (int j= 0; j < columnCount; j++)
            {
                // 4) create textView
                TextView textView = new TextView(this);
                //  textView.setText(String.valueOf(j));
                textView.setBackgroundColor(Color.WHITE);
                textView.setGravity(Gravity.CENTER);

                if (i ==0 && j==0)
                {
                    textView.setText("Date");
                }
                else if(i==0)
                {
                    Log.d("TAG", "set Column Headers");
                    textView.setText(cv[j-1]);
                }
                else if( j==0)
                {
                    //set up for dates
                    Log.d("TAG", "Set Row Headers");
                    textView.setText(rv.get(i).toString());
                }
                else if (j == 1)
                {
                    textView.setText(pay.get(i).toString());

                }
                else if (j == 2)
                {
                    textView.setText(intr.get(i).toString());

                }
                else if (j == 3)
                {
                    textView.setText(prin.get(i).toString());

                }
                else if (j == 4)
                {
                    textView.setText(bal.get(i).toString());

                }

                // 5) add textView to tableRow
                tableRow.addView(textView, tableRowParams);
            }

            // 6) add tableRow to tableLayout
            tableLayout.addView(tableRow, tableLayoutParams);
        }

        return tableLayout;
    }
}

为什么启动活动不正常?我没有得到任何错误消息,调试帧只是在它遇到新活动时就停止了。我也不确定主线程是否可以处理表格布局的所有动态创建。除了为什么这不起作用还有办法打破渲染计算?

编辑,有一个事件日志 - Logcat:

01-30 13:30:14.462 32279-32279/? W/audio_hw_generic: Not supplying enough data to HAL, expected position 21866747 , only wrote 21713760
01-30 13:30:16.385 32360-516/? I/ActivityManager: START u0 {flg=0x10000000 cmp=dcash.loanschedulecalculator/.scrollTable (has extras)} from uid 10095
01-30 13:30:16.440 9711-9711/dcash.loanschedulecalculator I/Choreographer: Skipped 298 frames!  The application may be doing too much work on its main thread.
01-30 13:30:16.461 32360-410/? E/JavaBinder: !!! FAILED BINDER TRANSACTION !!!  (parcel size = 743720)
01-30 13:30:16.462 32360-410/? W/ActivityManager: Exception when starting activity dcash.loanschedulecalculator/.scrollTable
                                                  android.os.TransactionTooLargeException: data parcel size 743720 bytes
                                                      at android.os.BinderProxy.transactNative(Native Method)
                                                      at android.os.BinderProxy.transact(Binder.java:748)
                                                      at android.app.IApplicationThread$Stub$Proxy.scheduleLaunchActivity(IApplicationThread.java:1230)
                                                      at com.android.server.am.ActivityStackSupervisor.realStartActivityLocked(ActivityStackSupervisor.java:1467)
                                                      at com.android.server.am.ActivityStackSupervisor.startSpecificActivityLocked(ActivityStackSupervisor.java:1571)
                                                      at com.android.server.am.ActivityStack.resumeTopActivityInnerLocked(ActivityStack.java:2663)
                                                      at com.android.server.am.ActivityStack.resumeTopActivityUncheckedLocked(ActivityStack.java:2215)
                                                      at com.android.server.am.ActivityStackSupervisor.resumeFocusedStackTopActivityLocked(ActivityStackSupervisor.java:2062)
                                                      at com.android.server.am.ActivityStack.completePauseLocked(ActivityStack.java:1449)
                                                      at com.android.server.am.ActivityStack.activityPausedLocked(ActivityStack.java:1375)
                                                      at com.android.server.am.ActivityManagerService.activityPaused(ActivityManagerService.java:7251)
                                                      at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:317)
                                                      at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2935)
                                                      at android.os.Binder.execTransact(Binder.java:674)
01-30 13:30:16.463 32360-410/? W/ActivityManager: Force removing ActivityRecord{2aa6505 u0 dcash.loanschedulecalculator/.AmortizationSchedule t144}: app died, no saved state
01-30 13:30:16.477 32360-410/? I/ActivityManager: Start proc 9753:dcash.loanschedulecalculator/u0a95 for activity dcash.loanschedulecalculator/.scrollTable
01-30 13:30:16.480 9753-9753/? I/zygote: Not late-enabling -Xcheck:jni (already on)
01-30 13:30:16.507 9753-9753/? W/zygote: Unexpected CPU variant for X86 using defaults: x86
01-30 13:30:16.530 32360-419/? E/JavaBinder: !!! FAILED BINDER TRANSACTION !!!  (parcel size = 743720)
01-30 13:30:16.531 32360-419/? E/ActivityManager: Second failure launching dcash.loanschedulecalculator/.scrollTable, giving up
                                                  android.os.TransactionTooLargeException: data parcel size 743720 bytes
                                                      at android.os.BinderProxy.transactNative(Native Method)
                                                      at android.os.BinderProxy.transact(Binder.java:748)
                                                      at android.app.IApplicationThread$Stub$Proxy.scheduleLaunchActivity(IApplicationThread.java:1230)
                                                      at com.android.server.am.ActivityStackSupervisor.realStartActivityLocked(ActivityStackSupervisor.java:1467)
                                                      at com.android.server.am.ActivityStackSupervisor.attachApplicationLocked(ActivityStackSupervisor.java:972)
                                                      at com.android.server.am.ActivityManagerService.attachApplicationLocked(ActivityManagerService.java:6958)
                                                      at com.android.server.am.ActivityManagerService.attachApplication(ActivityManagerService.java:7025)
                                                      at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:291)
                                                      at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2935)
                                                      at android.os.Binder.execTransact(Binder.java:674)
01-30 13:30:16.531 32360-419/? I/ActivityManager: Process dcash.loanschedulecalculator (pid 9753) has died: fore TOP 
01-30 13:30:16.545 32360-419/? I/ActivityManager: Start proc 9767:dcash.loanschedulecalculator/u0a95 for activity dcash.loanschedulecalculator/.scrollTable
01-30 13:30:16.567 32360-32483/? W/InputDispatcher: channel '88672e0 dcash.loanschedulecalculator/dcash.loanschedulecalculator.AmortizationSchedule (server)' ~ Consumer closed input channel or an error occurred.  events=0x9
01-30 13:30:16.567 32360-32483/? E/InputDispatcher: channel '88672e0 dcash.loanschedulecalculator/dcash.loanschedulecalculator.AmortizationSchedule (server)' ~ Channel is unrecoverably broken and will be disposed!
01-30 13:30:16.572 9767-9767/? I/zygote: Not late-enabling -Xcheck:jni (already on)
01-30 13:30:16.599 9767-9767/? W/zygote: Unexpected CPU variant for X86 using defaults: x86
01-30 13:30:16.605 32360-32706/? I/WindowManager: WIN DEATH: Window{88672e0 u0 dcash.loanschedulecalculator/dcash.loanschedulecalculator.AmortizationSchedule}
01-30 13:30:16.605 32360-32706/? W/InputDispatcher: Attempted to unregister already unregistered input channel '88672e0 dcash.loanschedulecalculator/dcash.loanschedulecalculator.AmortizationSchedule (server)'
01-30 13:30:16.627 1395-1395/? D/gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 8298496
01-30 13:30:16.642 32360-419/? W/ActivityManager: Slow operation: 125ms so far, now at attachApplicationLocked: after mServices.attachApplicationLocked
01-30 13:30:16.653 32360-419/? W/ActivityManager: Slow operation: 136ms so far, now at attachApplicationLocked: after updateOomAdjLocked
01-30 13:30:16.665 32360-32407/? E/ViewRootImpl[loanschedulecalculator]: Attempting to destroy the window while drawing!
                                                                           window=android.view.ViewRootImpl@9617e17, title=Splash Screen dcash.loanschedulecalculator
01-30 13:30:16.718 1395-1395/? D/gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 8298496
01-30 13:30:16.725 32360-304/? W/ActivityManager: Slow operation: 59ms so far, now at attachApplicationLocked: after mServices.attachApplicationLocked
01-30 13:30:16.727 32360-304/? W/ActivityManager: Slow operation: 62ms so far, now at attachApplicationLocked: after updateOomAdjLocked
01-30 13:30:16.729 32360-32388/? W/Looper: Dispatch took 204ms on android.ui, h=Handler (com.android.server.am.ActivityManagerService$UiHandler) {452b573} cb=null msg=53
01-30 13:30:16.730 32360-32407/? W/ActivityManager: setHasOverlayUi called on unknown pid: 9711
01-30 13:30:16.752 1395-1395/? D/gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 8298496
01-30 13:30:16.808 1413-1879/? E/BufferQueueProducer: [Splash Screen dcash.loanschedulecalculator#0] queueBuffer: BufferQueue has been abandoned
01-30 13:30:16.808 32360-32467/? E/Surface: queueBuffer: error queuing buffer to SurfaceTexture, -19
01-30 13:30:16.808 32360-32467/? E/Surface: queueBuffer (handle=0x898a4a00) failed (No such device)
01-30 13:30:16.809 1395-1395/? D/gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 8298496
01-30 13:30:16.811 32360-32467/? E/ViewRootImpl[loanschedulecalculator]: Could not unlock surface
                                                                         java.lang.IllegalArgumentException
                                                                             at android.view.Surface.nativeUnlockCanvasAndPost(Native Method)
                                                                             at android.view.Surface.unlockSwCanvasAndPost(Surface.java:351)
                                                                             at android.view.Surface.unlockCanvasAndPost(Surface.java:332)
                                                                             at android.view.ViewRootImpl.drawSoftware(ViewRootImpl.java:3104)
                                                                             at android.view.ViewRootImpl.draw(ViewRootImpl.java:3007)
                                                                             at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2794)
                                                                             at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2347)
                                                                             at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1386)
                                                                             at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6733)
                                                                             at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
                                                                             at android.view.Choreographer.doCallbacks(Choreographer.java:723)
                                                                             at android.view.Choreographer.doFrame(Choreographer.java:658)
                                                                             at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
                                                                             at android.os.Handler.handleCallback(Handler.java:789)
                                                                             at android.os.Handler.dispatchMessage(Handler.java:98)
                                                                             at android.os.Looper.loop(Looper.java:164)
                                                                             at android.os.HandlerThread.run(HandlerThread.java:65)
                                                                             at com.android.server.ServiceThread.run(ServiceThread.java:46)

0 个答案:

没有答案