0

署名の png ファイルをサーバーの 1 つに移動する割り当てがあります。私が実装した解決策は、保存されているフォルダーを監視して移動するバックグラウンド サービスを用意することです。これはうまくいきますが、サービスは一定の時間が経過するとシャットダウンします.1時間かそこらかもしれませんが、永続的にしたいと思います. いくつかの調査を行った結果、アラーム マネージャーまたはハンドラーを使用してアクティビティを維持することができました。

ハンドラを使用することにしました。ただし、アクティビティが呼び出されるたびにデバイスがハングし、更新するたびにより多くのメモリが必要になります。原因は、'stopWatching()' を呼び出さないことが原因である可能性がありますが、問題を誤って処理した可能性があります。

SendToPHP.java

public class SendToPHP extends Activity {
final int FIFTEEN_MINUTES_IN_MILLISECONDS = 900000;

//The handler will run the function restart at a later time
//This should prevent the intent service timeout.
Handler handler = new Handler();
Runnable runnable = new Runnable() {
    public void run() {
        finish();
        startActivity(getIntent());
    }
};
    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        Intent mServiceIntent = new Intent(SendToPHP.this,
                BackgroundService.class);
        // Starts the IntentService
        SendToPHP.this.startService(mServiceIntent);
        handler.postDelayed(runnable, FIFTEEN_MINUTES_IN_MILLISECONDS);
    }

}

BackgroundService.java

@Override
protected void onHandleIntent(Intent workIntent) {

    /************* Php script path ****************/
    upLoadServerUri = "*redacted*";

    //FileObserver monitors files/directories, in this case we want any file that is
    //created in SignItPictures
    FileObserver observer = new FileObserver(android.os.Environment
            .getExternalStorageDirectory().toString() + "/Pictures/SignItPictures", FileObserver.CREATE ) { 
        @Override
        public void onEvent(int event, String file) {
            uploadFileName = file;
            uploadFile(uploadFilePath + "/" + uploadFileName);
        }
    };
    observer.startWatching(); // start the observer
}
4

1 に答える 1