【问题标题】:Thread causes applications to become unreponsive线程导致应用程序无响应
【发布时间】:2013-01-31 20:21:20
【问题描述】:

我有一个使用以下代码注册观察者的活动

活动:

//Register for network status updates
NetworkStatus networkStatus = new NetworkStatus(this);
networkStatus.addObserver(new OfflineActivity());
Thread thread = new Thread(networkStatus);
thread.run();

主题:

@Override
public void run() {

    for(;;) {
        Log.d("NetworkStatus", "Checking Network Status");
        if(isConnectedToInternet(context)){
            notifyObservers();
            Log.d("NetworkStatus", "Network Connection is established");
        }
        else {
            Log.d("NetworkStatus", "Not connected to network");
        }
    }   
}

当我点击进入活动时,程序变得无响应。有什么想法吗?

【问题讨论】:

  • 嗯,连接到互联网时无限循环生成 notifyObservers() 消息?
  • 我有一个 thread.sleep() 但我删除了它,因为我认为它导致了问题。问题是 thread.run() 而不是 thread.start()。

标签: android multithreading android-activity


【解决方案1】:

你应该使用.start();

Thread thread = new Thread(networkStatus);
thread.start();

当你显式调用 run 方法时,它实际上并没有产生一个新的线程,而是方法调用仍然在 UI 线程中运行。

【讨论】:

  • 啊,当然,一整天都在犯这样的错误,谢谢(再次:P)!
  • 没问题 :-) 请记住,尽管多线程可能会严重失败。一定要小心!
【解决方案2】:

您的线程运行处于无限循环中。请添加中断条件,使其退出。

【讨论】:

    猜你喜欢
    • 2014-12-15
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    相关资源
    最近更新 更多