2010-10-28 56 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