2010-10-28 89 views
0

Hai Friends, 我已經創建了一個示例應用程序,其中我有一個列表視圖,當用戶單擊列表視圖時,下一個目標有時會被調用,但沒有問題,但大多數時間顯示爲強制關閉或等待消息如附圖所示,我想停止顯示這個強制關閉或等待對話框,我不知道如何停止這個警告消息,所以引導我,以阻止這一點。 請參照我的輸出 ![替代文本] [1] 請參照我logcat的消息需要幫助解決在Android的力量關閉問題?

10-28 16:30:54.640: DEBUG/NetworkLocationProvider(76): getLocation(): triggering a wifi scan 
10-28 16:30:55.410: DEBUG/NetworkLocationProvider(76): updateWifIScanResults(): 5 APs 
10-28 16:30:55.430: DEBUG/LocationMasfClient(76): getNetworkLocation(): Returning cache location with accuracy 75.0 
10-28 16:31:05.220: DEBUG/dalvikvm(15032): GC freed 15 objects/600 bytes in 124ms 
10-28 16:31:05.690: INFO/ActivityManager(76): Stopping service: com.google.android.apps.maps/com.google.googlenav.friend.android.LocationFriendService 
10-28 16:31:09.960: DEBUG/WifiService(76): ACTION_BATTERY_CHANGED pluggedType: 2 
10-28 16:31:13.186: DEBUG/KeyguardViewMediator(76): wakeWhenReadyLocked(82) 
10-28 16:31:13.190: DEBUG/KeyguardViewMediator(76): handleWakeWhenReady(82) 
10-28 16:31:13.190: DEBUG/KeyguardViewMediator(76): pokeWakelock(5000) 
10-28 16:31:13.250: DEBUG/WifiService(76): ACTION_SCREEN_ON 
10-28 16:31:13.430: DEBUG/SurfaceFlinger(76): Screen about to return, flinger = 0x1896a0 
10-28 16:31:15.610: DEBUG/KeyguardViewMediator(76): pokeWakelock(5000) 

回答

0

當你阻止圖形用戶界面線程(你唯一的線索,如果你沒有手工創建人顯示此消息) 需很長時間。如果您的活動中有一些代碼需要很長時間才能完成大量工作或睡眠,則應將此代碼移至另一個線程。

我建議測量所有活動方法所用的時間。

+0

感謝您評論:您建議測量所有活動方法所花費的時間,請詳細說明這一點,即我正在問如何實現這一點,請給我看一些好的樣本。 – 2010-10-28 11:44:59

+0

你可以使用探查器,在這裏你有一個完整的解釋,我已經詳細闡述了上個月:http://organicandroid.blogspot.com/2010/09/performance.html – Ruben 2010-10-28 11:53:49

+0

或者,如果你更喜歡官方開發者的話:http:// android-developers.blogspot.com/2010/10/traceview-war-story.html – Ruben 2010-10-28 11:54:16

0

如果你弄清楚你在做什麼繁重的工作,你可以把它分成另一個線程,然後在完成後回調到UI線程,這樣你就可以啓動你的意圖了。

public class ExampleActivity extends Activity 

    private ProgressDialog mDialog; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mDialog= ProgressDialog.show(ExampleActivity.this, "Please wait...", "...", true); 
     new Thread(new Runnable() { 
     @Override 
     public void run() { 
         // Do some long loading 
         // and then 
         mHandler.sendEmptyMessage(1); //Notice the 1 in the switch statement 
     } 
    }).start(); 
    } 

public Handler mHandler = new Handler() { 
     public void handleMessage(Message msg) { 

      switch (msg.what) { 
       case 1: 
        mDialog.dismiss(); 
        // Your back in the UI thread 
          // Fire whatever method you want 
       break; 
       default: 
        Log.i(TAG, "Handler on got message that wasnt dealt with"); 
       break; 
      } 
     } 
    }; 
    } 

在一個側面不是我可以看到你在做iPhone的轉換,卸下一個UI

0

我希望你明白阻塞GUI線程意味着後退按鈕......沒有必要,也不令人愉快。 如果需要,您可以嘗試在處理程序中執行像網絡活動那樣的繁重和耗時的操作。

+0

@Ruben我讀了你的文章,但可能它沒有在Froyo之前的許可沒有工作。如果我們使用2.1,那麼我們必須爲我們的應用程序提供一些權限。但我不確定,這是什麼權限。你能告訴我嗎?它是:WRITE_EXTERNAL_STORAGE – 2010-11-11 06:21:17

+0

是的,它是。對不起,我剛剛看到這個評論,我覺得StackOverflow不能識別twitter樣式引用。 – Ruben 2010-12-11 12:44:24

+0

沒錯,至少到現在爲止。評論和回答不工作的Twitter方式。 :-) – 2010-12-13 05:18:37