android显示错误

时间:2010-10-22 11:25:53

标签: android

我的android应用程序显示keydispatching超时错误。每当我触摸屏幕时都不会发生这种情况。我在应用程序启动几秒钟后发生了。这是什么原因?我使用了4个图像视图,oncreate()。当我触摸imageview时,它必须通过GPRS从服务器下载图像。我在onCreate()方法中实现了主线程的完整操作。这是我的探索吗?我应该实现onStart(),onResume(),onPause(),onRestart()和onDestroy()方法吗?

3 个答案:

答案 0 :(得分:3)

我相信你收到了ANR(App Not Responding)消息。

我建议你在单独的帖子中下载图片。使用AsyncTask执行此类下载任务&避免在主线程的onCreate()或任何其他生命周期方法中下载数据

 private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
     protected Long doInBackground(URL... urls) {
         int count = urls.length;
         long totalSize = 0;
         for (int i = 0; i < count; i++) {
             totalSize += Downloader.downloadFile(urls[i]);
             publishProgress((int) ((i / (float) count) * 100));
         }
         return totalSize;
     }

     protected void onProgressUpdate(Integer... progress) {
         setProgressPercent(progress[0]);
     }

     protected void onPostExecute(Long result) {
         showDialog("Downloaded " + result + " bytes");
     }
 }

检查链接http://developer.android.com/reference/android/os/AsyncTask.html

答案 1 :(得分:2)

你不能在UI线程中进行任何花费任何显着时间的处理(例如从网上下载一些东西),这就是调用所有方法的所有方法。

您必须将此部分功能移至服务中,或者在循环线程中执行此操作。

答案 2 :(得分:-1)

public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);         的setContentView(R.layout.main);

    dlgAlert   = new AlertDialog.Builder(this);
    //      location   = new Location(provider);
    imView     = (ImageView)findViewById(R.id.mapview);
    zoomInView = (ImageView)findViewById(R.id.zoomin);
    zoomOutView = (ImageView)findViewById(R.id.zoomout);
    exitView = (ImageView)findViewById(R.id.exit);

imView.setOnTouchListener(new View.OnTouchListener(){ public boolean onTouch(视图视图,MotionEvent事件){ if(event.getAction()== MotionEvent.ACTION_DOWN){ //停止行动的操作 } else if(event.getAction()== MotionEvent.ACTION_UP){ //用于向上操作的操作 }