首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何确定我的android运行程序是在工作线程上启动的?

我如何确定我的android运行程序是在工作线程上启动的?
EN

Stack Overflow用户
提问于 2015-11-08 10:21:56
回答 1查看 76关注 0票数 0

我试图通过使用线程来了解在Android/Java上执行后台任务的方法。我做了一个简单的测试应用程序,它纯粹地做了一个新线程(新的Runnable()),并在runnable中睡觉。当它运行时,我仍然能够点击UI上的按钮(我可以看到视觉反馈)。

很高兴这起作用了,我将相同的代码移到我的主要应用程序代码库中,但似乎它仍然在UI线程上运行,因为GUI锁定了,而ANR在睡眠循环完成后弹出。

有人能帮我弄清楚为什么我的backgroundThread没有在后台或工作线程上运行吗?

LoginService.java

代码语言:javascript
复制
package com.example.services;

import android.app.Activity;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;

public class LoginService implements ILoginService {

private Handler handler;

public LoginService() {
    handler = new Handler(Looper.getMainLooper()){
        @Override
        public void handleMessage(Message msg) {
        // Handle a message from the background task
            Log.d("LoginService","Received a Message");
        }
    };
}

/*
    Check if the username exists in the list
 */
@Override
public boolean isUsernameValid(String username) {
    Log.d("LoginService","Starting Runnable");
    Thread backgroundThread = new Thread(new LoginRunnable(this));

    backgroundThread.run();
    Log.d("LoginService", "Started Runnable");
    return true;
}

/*
    Check if the password is correct for the downloaded user
 */
@Override
public boolean doesPasswordMatch(String password) {
    return false;
}

@Override
public void handleStatus(int i) {
    switch (i) {
        case 1:
            Message newMessage = handler.obtainMessage();
            newMessage.sendToTarget();
            break;
        default:
            break;
    }
}
}

LoginRunnable.java

代码语言:javascript
复制
package com.example.services;

import android.util.Log;

public class LoginRunnable implements Runnable {

public ILoginService loginService;

public LoginRunnable(ILoginService loginService)
{
    this.loginService = loginService;
}

@Override
public void run() {
    // Do the login tasks here
    try {
        for(int i = 0;i<=50;i++) {
            Thread.sleep(200);
            Log.d("LoginRunnable","200ms has passed");
            loginService.handleStatus(1);
        }
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    // Return some completion message to the LoginService.

}
}

来自App的输出

代码语言:javascript
复制
11-08 18:06:36.757  11722-11722/com.example  D/LoginService﹕ Starting Runnable
11-08 18:06:36.971  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:37.181  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:37.391  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:37.601  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:37.811  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:38.021  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:38.231  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:38.441  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:38.652  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:38.861  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:39.072  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:39.282  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:39.492  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:39.701  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:39.912  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:40.121  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:40.332  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:40.542  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:40.752  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:40.962  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:41.172  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:41.381  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:41.592  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:41.802  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:42.012  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:42.222  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:42.432  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:42.642  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:42.851  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:43.062  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:43.272  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:43.482  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:43.692  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:43.902  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:44.112  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:44.322  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:44.532  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:44.741  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:44.952  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:45.162  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:45.372  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:45.582  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:45.792  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:46.002  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:46.212  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:46.422  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:46.632  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:46.842  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:47.052  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:47.262  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:47.472  11722-11722/com.example  D/LoginRunnable﹕ 200ms has passed
11-08 18:06:47.472  11722-11722/com.example  D/LoginService﹕ Started Runnable
11-08 18:06:47.482  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.482  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.483  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.483  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.483  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.483  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.483  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.483  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.483  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.483  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.483  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.484  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.484  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.484  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.484  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.484  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.484  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.484  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.484  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.484  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.484  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.484  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.484  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.485  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.485  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.485  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.485  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.485  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.485  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.485  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.485  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.485  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.485  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.485  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.485  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.485  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.486  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.486  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.486  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.486  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.486  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.486  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.486  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.486  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.486  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.486  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.486  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.486  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.487  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.487  11722-11722/com.example  D/LoginService﹕ Received a Message
11-08 18:06:47.487  11722-11722/com.example  D/LoginService﹕ Received a Message

工作测试程序(独立项目)的输出

代码语言:javascript
复制
11-08 17:57:31.284  32596-32610/com.subarudev.threadingtest D/SleepRunnable﹕ Sleeping on thread
11-08 17:57:31.284  32596-32596/com.subarudev.threadingtest D/MainActivity﹕ Handle Message
11-08 17:57:31.493  32596-32610/com.subarudev.threadingtest D/SleepRunnable﹕ Sleeping on thread
11-08 17:57:31.494  32596-32596/com.subarudev.threadingtest D/MainActivity﹕ Handle Message
11-08 17:57:31.704  32596-32610/com.subarudev.threadingtest D/SleepRunnable﹕ Sleeping on thread
11-08 17:57:31.704  32596-32596/com.subarudev.threadingtest D/MainActivity﹕ Handle Message
11-08 17:57:31.914  32596-32610/com.subarudev.threadingtest D/SleepRunnable﹕ Sleeping on thread
11-08 17:57:31.914  32596-32596/com.subarudev.threadingtest D/MainActivity﹕ Handle Message
11-08 17:57:32.123  32596-32610/com.subarudev.threadingtest D/SleepRunnable﹕ Sleeping on thread
11-08 17:57:32.124  32596-32596/com.subarudev.threadingtest D/MainActivity﹕ Handle Message
11-08 17:57:32.334  32596-32610/com.subarudev.threadingtest D/SleepRunnable﹕ Sleeping on thread
11-08 17:57:32.334  32596-32596/com.subarudev.threadingtest D/MainActivity﹕ Handle Message
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-08 10:31:06

backgroundThread.run() -> backgroundThread.start()?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33592912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档