編輯:Android開發實例
1、什麼是ANR異常?
application not response 應用程序無響應。在用戶進行一個操作,如果用戶在6秒內沒有操作的話,就會出現異常
代碼示例:
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.Toast;
- public class MainActivity extends Activity {
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- }
- public void doSomething(View view) throws Exception {
- try {
- Thread.sleep(10000);//讓主線程睡眠
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- System.out.println("從網絡獲取數據成功!");
- }
- public void toast(View view) {
- Toast.makeText(this, "十八大開幕了!", 0).show();
- }
- }
2、為什麼會出現ANR異常?
android系統中處理用戶操作的工作時在主線程中執行的,如果我們的程序在主線程中進行一些耗時的操作,導致用戶的操作6秒不能夠處理,就會出現異常。
主線程休眠,那麼再點擊程序,必須等主線程睡醒後才會反應。
所以在主線程中不要做太耗時的工作,因為主界面會阻塞。
3、解決辦法:讓這些耗時的操作放在新線程裡面操作。
注意:如果新線程裡面做的事情要更新界面的話,就要使用handler來操作。
連接網絡的事都要放在新線程裡面的。
解決代碼(包括更新界面的操作,使用的是handler):
- import android.app.Activity;
- import android.os.Bundle;
- import android.os.Handler;
- import android.view.View;
- import android.widget.TextView;
- import android.widget.Toast;
- public class MainActivity extends Activity {
- private TextView numTV;
- private Handler handler = new Handler();
- private int i;
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- numTV = (TextView) findViewById(R.id.numTV);
- }
- public void doSomething(View view) throws Exception {
- new Thread() {
- public void run() {
- for (i = 1; i < 20; i++) {
- handler.post(new Runnable() {
- public void run() {
- numTV.setText(i + "");
- }
- });
- System.out.println(i);
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- };
- }.start();
- }
- public void toast(View view) {
- Toast.makeText(this, "十八大開幕了!", 0).show();
- }
- }
JSON代表JavaScript對象符號。它是一個獨立的數據交換格式,是XML的最佳替代品。本章介紹了如何解析JSON文件,並從中提取所需的信息。Android提供了四個
可以顯示在的Android任務,通過加載進度條的進展。進度條有兩種形狀。加載欄和加載微調(spinner)。在本章中,我們將討論微調(spinner)。Spinner 用
SlidingDrawer隱藏屏外的內容,並允許用戶通過handle以顯示隱藏內容。它可以垂直或水平滑動,它有倆個View組成,其一是可以拖動的handle,其二
本文實例講述了Android編程之客戶端通過socket與服務器通信的方法。分享給大家供大家參考,具體如下: 下面是一個demo,Android客戶端通過sock