如何使用线程和服务。 Android的

时间:2013-12-03 16:42:11

标签: android user-interface service

我有三节课。 “actone”,“acttwo”和“actthree”。我在“actone”中有一个按钮。当我单击该按钮时,我希望能够在后台的另一个线程上运行“acttwo”,而我的UI将我带到“actthree”,当“acttwo”中的代码继续执行时,我可以做任何我想做的事情(我将在“acttwo”中上传到服务器,这就是为什么我希望它继续在后台运行。)

if(v.getId() == R.id.button1){

//Start "acttwo" in background on another thread.

Intent i= new Intent(actone.this, actthree.class);
            startActivity(i);
}

我该怎么做?我使用服务吗?如果是,那么程序是什么?怎么做?我是Android的新手。请帮忙。谢谢!

2 个答案:

答案 0 :(得分:0)

有两种方法可以执行此操作,使用Singleton或使用服务(如您所述)。就个人而言,我不太喜欢单身模式,而且服务更好地遵循Android模式。您将需要使用绑定到Applications上下文(actone.getActivityContext())的绑定服务。我已经为this question写了一个类似的答案,但是你会想做类似的事情:

public class BoundService extends Service {
    private final BackgroundBinder _binder = new BackgroundBinder();

    //Binding to the Application context means that it will be destroyed (unbound) with the app
    public IBinder onBind(Intent intent) {
        return _binder;
    }

    //TODO: create your methods that you need here (or link actTwo)
    // Making sure to call it on a separate thread with AsyncTask or Thread

    public class BackgroundBinder extends Binder {
        public BoundService getService() {
            return BoundService.this;
        }
    }
}

然后从你的actone(我假设活动)

public class actone extends Activity {
    ...

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...

        Intent intent = new Intent(this, BoundService.class);
        bindService(intent, _serviceConnection, Context.BIND_AUTO_CREATE);
    }

    private ServiceConnection _serviceConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName className, IBinder service) {
            BoundService.BackgroundBinder binder = (BoundService.BackgroundBinder)service;
            _boundService = binder.getService();
            _isBound = true;

            //Any other setup you want to call. ex.
            //_boundService.methodName();
        }

        @Override
        public void onServiceDisconnected(ComponentName arg0) {
            _isBound = false;
        }
    };
}

然后从ActOne和ActThree(活动?),你可以从actTwo获得绑定服务和调用方法。

答案 1 :(得分:0)

您可以使用AsyncTask。服务并不真正有用(代码更多)。