15

Tôi muốn thực hiện một số nhiệm vụ T vào thời gian cụ thể trong một ngày ở chế độ nền trong phản ứng gốc. Tôi thấy rằng có thể trong Android kể từ bây giờ sử dụng Headless JS. Tôi thấy rằng thư viện này đã triển khai thực hiện https://github.com/vikeri/react-native-background-job này và cho phép bạn thực thi nội dung ở chế độ nền.Cách sắp xếp công việc nền tại thời điểm cụ thể trong phản ứng gốc

Đây không phải là hoàn toàn những gì tôi đang tìm kiếm, nó không cho phép bạn lên lịch một nhiệm vụ T vào thời gian cụ thể. Có ai biết bất kỳ công việc xung quanh cho điều này?

Tôi đã kiểm tra chủ đề này Execute code at specific time in react native nơi tôi không tìm thấy giải pháp về vấn đề của mình.

Trả lời

5

Tôi gặp phải một vấn đề tương tự, thật không may, bạn không thể chỉ định một cái gì đó tương tự như hành động CRON trong RN.

Giải pháp của tôi cho vấn đề đó là sử dụng thư viện này https://github.com/ocetnik/react-native-background-timer và tính toán sự khác biệt giữa thời gian và thời gian hiện tại mà tác vụ được lên lịch.

Thời gian tính toán nên được tính bằng ms, vì vậy bạn có thể sử dụng nó với chức năng cung cấp setTimeout:

// Start a timer that runs once after X milliseconds 
const timeoutId = BackgroundTimer.setTimeout(() => { 
    // this will be executed once after 10 seconds 
    // even when app is the the background 
    console.log('tac'); 
}, 10000); 

Ví dụ:

Hãy nói rằng bạn muốn sắp xếp công việc cho ngày mai tại 16, trong componentDidMount bạn có thể tính toán thời gian giữa giờ và ngày đã lên lịch. Hãy sử dụng moment cho điều đó:

componentDidMount(){ 
    const scheduledDate = 
    moment().add(1,'d').set({hour:16,minute:0,second:0,millisecond:0}) 
    const diffTime = scheduledDate.diff(moment()) 
    this.timeoutId = BackgroundTimer.setTimeout(() => { 
    console.log('tac'); 
    }, diffTime); 
} 

componentWillUnmount(){ 
BackgroundTimer.clearTimeout(this.timeoutId); 
} 

Lưu ý rằng giải pháp này dễ bị người dùng thay đổi thời gian trên điện thoại của mình. Giải pháp hoàn hảo sẽ là sử dụng một số dịch vụ bên ngoài để tìm nạp thời gian.

Lưu ý thứ hai, ứng dụng cần phải có ít nhất ở nền để tính năng này hoạt động.

0

Tạo lớp và thêm này trong lớp học của bạn

public static final long NOTIFY_INTERVAL = 10 * 1000; // 30 minutes 

@Override 
    public void onCreate() { 
     // cancel if already existed 
     if (mTimer != null) { 
      mTimer.cancel(); 
     } else { 
      // recreate new 
      mTimer = new Timer(); 
     } 
     // schedule task 
     mTimer.scheduleAtFixedRate(new TimeDisplayTimerTask(), 0, NOTIFY_INTERVAL); 
    } 

class TimeDisplayTimerTask extends TimerTask { 
     @Override 
     public void run() { 
      // run on another thread 
      mHandler.post(new Runnable() { 
       @Override 
       public void run() { 
        // code 
       } 
      }); 
     } 
    } 
+0

đặt mã này vào lớp dịch vụ mà bạn muốn chạy trong nền –

Các vấn đề liên quan