即使在应用程序被杀之后,我也希望在后台运行一个动作(Runnable中的一个动作)。我在public static int[] bubbleSort (int[] a) {
int n = a.length;
int j = 0;
boolean swap = true;
while (swap) {
swap = false;
for (int j = 1; j < n; j++) {
if (a[j-1] > a[j]) {
j = a[j-1];
a[j-1] = a[j];
a[j] = j;
swap = true;
}
}
n = n - 1;
}
return a;
}//end bubbleSort
中的r(在Thread中不能应用java Runnable)和Thread t = new Thread(r);
(无法解析方法)中有错误
这是t.start();
onCreate()
答案 0 :(得分:0)
线程在其父进程被终止后被终止,如果您希望线程继续处理,您可以在单独的进程中启动它,请参阅this以获取更多信息。
如果您需要线程的结果,请尝试在两个进程之间传递信息,这可以通过多种方式实现。有关详细信息,请参阅this。
答案 1 :(得分:0)
关键是你可以创建一个守护进程的线程。守护程序线程它是一个在主线程终止后终止的线程。在您的情况下,您需要创建一个不是daemon线程的线程。你可以简单地调用方法
t.setDaemon(false)
在开始你的线程之前。
整个代码段是:
package com.stackoverflow;
public class Main {
public static void main(String[] args) {
Main main = new Main();
main.onCreate();
}
public void onCreate() {
Runnable r = new Runnable() {
@Override
public void run() {
Calendar cal = Calendar.getInstance(TimeZone.getDefault(), Locale.getDefault());
SharedPreferences sharedPref = getSharedPreferences("Alarms", Context.MODE_PRIVATE);
mh = sharedPref.getInt("morningHour", hour_x );
mm = sharedPref.getInt("morningMinute", minute_x );
int hours = cal.get(Calendar.HOUR_OF_DAY);
int minutes = cal.get(Calendar.MINUTE) ;
if(hours == mh && minutes == mm)
startAlarm();
nh = sharedPref.getInt("noonHour", hour_x );
nm = sharedPref.getInt("noonMinute", minute_x );
if(hours == nh && minutes == nm)
startAlarm();
eh = sharedPref.getInt("eveningHour", hour_x );
em = sharedPref.getInt("eveningMinute", minute_x );
if(hours == eh && minutes == em)
startAlarm();
}
};
Thread t = new Thread(r);
t.setDaemon(false);
t.start();
}
}