启动线程并具有后台活动

时间:2018-04-25 13:04:11

标签: java multithreading

即使在应用程序被杀之后,我也希望在后台运行一个动作(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()

2 个答案:

答案 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();
    }
}