이 함수를 구현하고 싶습니다 : 사용자가 버튼을 클릭하면 작업이 시작되고 5 분 후에 하나의 파일이 dropbox로 보내지지만 버튼에서 다른 시간을 클릭하면 선례 작업 중단 및 새 작업 (5 분) 시작.긴 지연 AsyncTask 및 작업 다시 시작
파일을 Dropbox에 업로드하는 코드를 작성했지만 오랜 시간 (5 분)의 작업으로 작성한 코드는 작성하지 않았습니다. 어떻게 할 수 있습니까?
- 편집 - xdevs23 @
덕분에, 나는 마지막 코드를
public void onSendOrder() {
try {
mHandler.removeCallbacks(postRunnable); // stop current wait
} catch(Exception ex) {
// Just if the above fails (might be first time)
ex.printStackTrace();
}
int minutes = 5;
mHandler.postDelayed(postRunnable, minutes * 20 * 1000 /* 5 minutes in milliseconds */);
...
...
...
private Runnable postRunnable = new Runnable() {
@Override
public void run() {
Thread myThread = new Thread(myRunnable);
myThread.start();
}
};
private Runnable myRunnable = new Runnable() {
@Override
public void run() {
// your code
int cloud = GetPreferenceCloud();
if(cloud > 0){
ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
final File bckDatabase = BackupDatabase();
if (networkInfo != null && networkInfo.isConnected() && bckDatabase != null) {
runOnUiThread(new Runnable() {
public void run() {
// call your asynctask here
new UploadOnCloud(MainActivity.this,
PreferenceConstants.DB_DATABASE_STORE_CLOUD,
PreferenceConstants.FILE_DIR_CLOUD,
bckDatabase,
mUListener,
cloud).execute();
}
});
} else {
Toast.makeText(getContext(),getContext().getResources().getString(R.string.send_msg13), Toast.LENGTH_SHORT).show();
}
}
}
};
* 편집을 구현했습니다.
public void onSendOrder() {
try {
mHandler.removeCallbacks(postRunnable); // stop current wait
} catch(Exception ex) {
// Just if the above fails (might be first time)
ex.printStackTrace();
}
minute = 3600;
//mHandler.postDelayed(postRunnable, minutes * 20 * 1000 /* 5 minutes in milliseconds */);
mHandler.postDelayed(postRunnable, 1000 /* 1 seconds */);
.... ....에서
:
가 onSend 기능을 수정 V2의 *
의 경우 상태 표시 줄에 카운트 다운을 구현 나는이 구현 한 파일 menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/break_timer"
android:title="00:00"
app:showAsAction="always"
app:actionViewClass="android.widget.TextView" />
<item
android:id="@+id/action_refresh"
android:title="@string/action_refresh"
app:showAsAction="ifRoom"
android:icon="@drawable/ic_action_autorenew"/>
</menu>
onC 수정 reateOptionsMenu
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
MenuItem timerItem = menu.findItem(R.id.break_timer);
timerText = (TextView) MenuItemCompat.getActionView(timerItem);
timerText.setPadding(10, 0, 10, 0); //Or something like that...
return super.onCreateOptionsMenu(menu);
}
private int minute;
private Runnable postRunnable = new Runnable() {
@Override
public void run() {
if(minute >= 0){
minute--;
mHandler.postDelayed(postRunnable, 1000 /* 1 seconds */);
timerText.setText(secondsToString(minute));
}else {
Thread myThread = new Thread(myRunnable);
myThread.start();
}
}
};
천만에요. 다른 문제는 정확히 무엇입니까? – xdevs23
나는 상태 표시 줄에 다운 카운터를 구현하여 서버에 파일을 보내기 전에 남아있는 분/초를 보여주고 싶습니다. –
매분 ** **를 실행할 실행 파일로 스레드를 하나 더 만들 수 있습니다. 실행 파일이 실행될 때마다'int minutes' 변수를 카운트 다운합니다. runnable에서, 예를 들어, 현재'int minutes' 값으로 통지를 보여줄 수 있습니다. – xdevs23