Соглашения о вызовах определяют, как параметры передаются в регистрах при вызове или вызове другой программой. И лучший источник этих соглашений - в виде стандартов ABI, определенных для каждого из этих аппаратных средств. Для простоты компиляции тот же ABI также используется программой для пользователей и ядра. Linux / Freebsd поддерживают один и тот же ABI для x86-64 и другой набор для 32-разрядных. Но x86-64 ABI для Windows отличается от Linux / FreeBSD. И, как правило, ABI не отличает системный вызов от обычных «вызовов функций». То есть, здесь приведен конкретный пример соглашений об вызовах x86_64 и он одинаковый как для Linux-пространства Linux, так и для ядра: http://eli.thegreenplace.net/2011/09/06/stack-frame-layout-on- x86-64 / (обратите внимание на последовательность параметров a, b, c, d, e, f):
Производительность одна из причин этих ABI (например, передача параметров через регистры вместо сохранения в пачки памяти)
Для ARM существует несколько ABI:
http: // infocenter .arm.com / help / index.jsp? topic = / com.arm.doc.subset.swdev.abi / index.html
https://developer.apple Соглашение ARM64: Для Linux на PowerPC:
http://www.0x04.net/doc/elf/psABI-ppc64.pdf
И для встроенного есть PPC EABI:
http://www.freescale.com/files/32bit/doc/app_note/PPCEABI.pdf
Этот документ является хорошим обзором всех различных конвенций:
вы можете использовать таймер обратного отсчета в android.
Вот один пример, который вы можете увидеть Нажмите здесь
, вы можете использовать ниже ProgressBar в своей деятельности.
<ProgressBar
android:id="@+id/progressbar"
style="@android:style/Widget.ProgressBar.Horizontal"
android:max="100"
android:progress="0"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/bottom_header_relativelayout"
/>
Используйте CountDownTimer
Как ниже код в вашей деятельности.
ProgressBar mProgressBar;
CountDownTimer mCountDownTimer;
int i=0;
mProgressBar=(ProgressBar)findViewById(R.id.progressbar);
mProgressBar.setProgress(i);
mCountDownTimer=new CountDownTimer(5000,1000) {
@Override
public void onTick(long millisUntilFinished) {
Log.v("Log_tag", "Tick of Progress"+ i+ millisUntilFinished);
i++;
mProgressBar.setProgress((int)i*100/(5000/1000));
}
@Override
public void onFinish() {
//Do what you want
i++;
mProgressBar.setProgress(100);
}
};
mCountDownTimer.start();
Вы можете использовать ObjectAnimator
для анимации хода ProgressBar
:
ObjectAnimator animation = ObjectAnimator.ofInt(pb, "progress", 0, 100);
animation.setDuration(5000);
animation.setInterpolator(new DecelerateInterpolator());
animation.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animator) { }
@Override
public void onAnimationEnd(Animator animator) {
//do something when the countdown is complete
}
@Override
public void onAnimationCancel(Animator animator) { }
@Override
public void onAnimationRepeat(Animator animator) { }
});
animation.start();
Не требуется декларация XML
ProgressDialog TempDialog;
CountDownTimer CDT;
int i =5;
TempDialog = new ProgressDialog(Your_Class_Name.this);
TempDialog.setMessage("Please wait...");
TempDialog.setCancelable(false);
TempDialog.setProgress(i);
TempDialog.show();
CDT = new CountDownTimer(5000, 1000)
{
public void onTick(long millisUntilFinished)
{
TempDialog.setMessage("Please wait.." + i + " sec");
i--;
}
public void onFinish()
{
TempDialog.dismiss();
//Your Code ...
}
}.start();