ANR (Application Not Responding) issue
ANR問題是每一個Android 工程師都會遇到的.
要解決的方法很多,但AsyncTask是最佳的方法.
如下圖,activity 1要轉換到activity2,如果中間有 loading很大量的資料,就會發生ANR問題.
private ImageView img1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Toast toast=Toast.makeText(DrawActivity.this, "Welcome to 小米app...", Toast.LENGTH_LONG);
toast.show();
new Loading().execute();
}
private class Loading extends AsyncTask<Void,Void,Void>
{
@Override
protected Void doInBackground(Void... arg0)
{
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Intent intent=new Intent();
intent.setClass(DrawActivity.this, StartApp.class);
startActivity(intent);
return null;
}
protected void onPostExecute(Void noUse)
{
Toast toast=Toast.makeText( DrawActivity.this, "hello.", Toast.LENGTH_LONG);
toast.show();
}
}
}
要解決的方法很多,但AsyncTask是最佳的方法.
如下圖,activity 1要轉換到activity2,如果中間有 loading很大量的資料,就會發生ANR問題.
public class DrawActivity extends Activity{ //implements OnClickListener {
/** Called when the activity is first created. */private ImageView img1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Toast toast=Toast.makeText(DrawActivity.this, "Welcome to 小米app...", Toast.LENGTH_LONG);
toast.show();
new Loading().execute();
}
private class Loading extends AsyncTask<Void,Void,Void>
{
@Override
protected Void doInBackground(Void... arg0)
{
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Intent intent=new Intent();
intent.setClass(DrawActivity.this, StartApp.class);
startActivity(intent);
return null;
}
protected void onPostExecute(Void noUse)
{
Toast toast=Toast.makeText( DrawActivity.this, "hello.", Toast.LENGTH_LONG);
toast.show();
}
}
}
留言
張貼留言