0

这是我要为每个Intent插入线程的代码。

public void onClick(View arg0) {
// TODO Auto-generated method stub
switch (arg0.getId()){
case R.id.artlistbtn:
    Intent openAL = new Intent(MainCore.this, MainActivity.class);
    startActivityForResult(openAL, 0);
        break;
case R.id.customslaws:
    Intent openCL = new Intent("slidenerd.vivz.FLAWS");
    startActivity(openCL);
    break;
case R.id.shouldknowbtn:
    Intent openSK = new Intent("slidenerd.vivz.KNOW");
    startActivity(openSK);
    break;
            }
  }
}
4

3 回答 3

2

所有活动都在一个主线程上运行,这是由系统而不是你设置的。但是,您可以自由地从活动中创建自己的线程并在那里运行一些代码。

于 2013-10-03T03:43:25.217 回答
0

首先,您不应该从单独的线程执行此类操作,您应该始终从主线程执行 UI 操作(并且您的 onClick 方法在主线程上执行)或(如果您使用单独的线程) - 包装这个函数在 runOnUIThread 调用中,无论如何都会导致在主线程上执行 startActivity/startActivityForResult。知道为什么你需要一个单独的线程吗?startActivity/startActivityForResult 是异步调用,因此它们不会阻塞您的代码。

于 2013-10-03T03:37:24.293 回答
0

Android执行您的程序时,您会从一个线程开始,即您的 UI 线程。这是唯一可以与 android 系统服务通信以告诉您应用程序应该做什么、何时以及如何做的服务。

当你创建一个新的活动时,你不会创建一个新的线程,你只是添加到现有的线程上。

有时我们需要运行可能需要很长时间才能执行的操作,并且需要在单独的线程上进行操作,我们可以这样做:

new Thread(){
    public void run(){
        while(true){
            //do stuff
        }
    }
}.start();

线程将在哪里单独运行,并且不会导致您的应用 ANR。

该线程将继续运行,直到它因完成任务而死亡,或者被杀死,但是,如果您启动一个新活动,您可能会失去对它的访问权限,或者错过回调,有时您需要一个线程运行一段时间,并在整个系统中访问它,对此的最佳用途,以及您的问题,听起来您想使用service.

请参阅文档 服务是一个应用程序组件,表示应用程序希望执行更长时间运行的操作。

于 2013-10-03T04:02:31.727 回答