Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在活动关闭时保持可运行线程的活动状态,但在活动再次启动时销毁该线程_Android_Runnable - Fatal编程技术网

Android 如何在活动关闭时保持可运行线程的活动状态,但在活动再次启动时销毁该线程

Android 如何在活动关闭时保持可运行线程的活动状态,但在活动再次启动时销毁该线程,android,runnable,Android,Runnable,我的一个活动中有一个可运行的线程,它在活动开始时启动。我希望即使在我的活动完成时也能保持线程运行,并且我希望在同一活动再次启动时销毁线程。这是可能的还是我必须尝试新的方法来实现我的目标?我建议使用服务。他们能活多久就活多久 public class MyService extends Service { private static final String TAG = "MyService"; @Override public IBinder onBind(Intent intent) {

我的一个活动中有一个可运行的线程,它在活动开始时启动。我希望即使在我的活动完成时也能保持线程运行,并且我希望在同一活动再次启动时销毁线程。这是可能的还是我必须尝试新的方法来实现我的目标?

我建议使用服务。他们能活多久就活多久

public class MyService extends Service {
private static final String TAG = "MyService";

@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public void onCreate() {
    Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show();
    Log.d(TAG, "onCreate");

}

@Override
public void onDestroy() {
    Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show();
    //stop thread
}

@Override
public void onStart(Intent intent, int startid) {
    Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
    Log.d(TAG, "onStart");
    //start thread (again)
}
}

您必须在舱单中声明您的服务

<service android:enabled="true" android:name=".MyService" />
如果要检查服务是否正在运行,可以使用此代码

private boolean isMyServiceRunning() {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
    if (MyService.class.getName().equals(service.service.getClassName())) {
        return true;
    }
}
return false;

}

有些可疑。你想完成什么?我有多个活动。在我的一个活动中,我实现了一个可运行线程。如果该活动已关闭,我不想破坏可运行线程。但我想在我的活动重新开始时销毁此线程@dmon该线程做什么?我通过该线程同时更新墙纸@请看一看
private boolean isMyServiceRunning() {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
    if (MyService.class.getName().equals(service.service.getClassName())) {
        return true;
    }
}
return false;