我有三节课。 “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的新手。请帮忙。谢谢!
答案 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
。服务并不真正有用(代码更多)。