0

我有一个看起来有点像的活动:请不要复制它,它从另一个类中获取三个变量并计算 (a,b) 、 (b,c) 、 (c,d) 、 (a,b,c) 的 gcd然后对等式进行因式分解,并为五个不同的 textViews 提供字符串。另外,如果您可以帮助将 x.square 改进为 x 2,请帮助我,欢迎所有建议。

package com.aditya.blabla;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class AlternateForms extends Activity {
AnotherClass ec = new AnotherClass ();
int aa = ec.geta();
int bb = ec.getb();
int cc = ec.getc();


int abhcf = HCF(aa, cc), bchcf = HCF(cc, cc), achcf = HCF(aa, cc),
        abchcf = HCF(abhcf, cc);
String altform1,altform2,altform3,altform4,altform5;
TextView t1, t2, t3, t4, t5;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.alternate);
    t1 = (TextView) findViewById(R.id.textView1);
    t2 = (TextView) findViewById(R.id.textView2);
    t3 = (TextView) findViewById(R.id.textView3);
    t4 = (TextView) findViewById(R.id.textView4);
    t5 = (TextView) findViewById(R.id.textView5);
    altform1 = abhcf + "x(" + aa / abhcf + "x+" + bb / abhcf + ")+"
            + cc;
    setProgress(20);
    altform2 = aa + "x.square" + bchcf + "(" + bb / bchcf + "x" + cc
            / bchcf + ")" + cc;
    setProgress(30);
    altform3 = achcf + "(" + aa / achcf + "x.square" + bb / achcf
            + ")" + cc + "x";
    setProgress(40);
    altform4 = abchcf + "(" + aa / abchcf + "x.square" + bb / abchcf
            + "x" + cc / abchcf + ")";
    setProgress(50);
    altform5 = abchcf + "(" + "x" + "(" + aa / abchcf + "x" + bb
            / abchcf + ")" + cc / abchcf + ")";
    if (abhcf != 1) {
        t1.setText(altform1);

    }
    if (bchcf != 1) {
        t2.setText(altform2);

    }
    if (achcf != 1) {
        t3.setText(altform3);

    }
    if (abchcf != 1) {
        t4.setText(altform4);
        t5.setText(altform5);

    }

}

private int HCF(int m, int n) {
    // TODO Auto-generated method stub
    int hcf = 0;
    while (n != 0) {
        hcf = n;
        n = m % n;
        n = hcf;
    }
    return hcf;
}

}

它没有错误,但它需要很多过程并且看起来像挂起并给出强制关闭对话框任何建议来处理这个?

4

3 回答 3

1

Put all calls to HCF(m, n) in the doInBackground(Void... params) method in an AsyncTask. Put all of the altformN assignments from the onCreate(Bundle s) method in doInBackground(Void... params) as well. Put all the if statements where you setText(CharSequence s) for each TextView in the onPostExecute(Void nothing) method of that AsyncTask. As you may know, the onPostExecute(Void nothing) method in AsyncTasks gets executed on the UI thread while doInBackground(Void... params) gets executed on a separate thread.

Here is a skeleton implementation:

public class AlternateFormsTask extends AsyncTask<Void, Void, Void> {
    int abhcf, bchcf, achcf, abchcf;
    int aa, bb, cc;
    AnotherClass ec = new AnotherClass ();

    @Override
    public Void doInBackground(Void.... params){
        aa = ec.geta();
        bb = ec.getb();
        cc = ec.getc();
        // ...insert all your calls to HCF(m, n) here
        return null
    }

    // If all the processing in doInBackground really takes that long
    // you may want to intersperse some calls to AsyncTask's publishProgress
    // to update the user as to the progress of the app, otherwise it will appear
    // just as hung as before, just without the FC dialogs.

     @Override
     public void onPostExecute(Void nothing){
        //....do all your setText stuff here
     }
}
于 2012-12-12T16:23:43.937 回答
0

Threads当它需要大量时间时,它总是看起来“挂起”而不使用。完成后使用Threads并更新您的 GUI。你应该尽可能少做一些工作MainThread

于 2012-12-12T15:00:34.213 回答
0

The hcf method should be changed to

static int HCF(int a, int b) {
while (b != 0) {
int t = b;
b = a % b;
a = t;
}
return a;
}
于 2012-12-13T09:33:53.027 回答