Android 每秒运行一次活动

Android 每秒运行一次活动,android,android-activity,timer,background,Android,Android Activity,Timer,Background,我希望我的第二个活动每秒运行一次,并向我的第一个活动发送更新。如果我不想我的屏幕也一直闪烁,这意味着我也可以启动其他活动。比如将第二个活动设置为应用程序的后台活动。我对这种编程是新手,所以我希望你能告诉我如何使用这种方法。谢谢 第一项活动 package com.example.suntracking; import java.util.Calendar; import java.util.Timer; import java.util.TimerTask; import andro

我希望我的第二个活动每秒运行一次,并向我的第一个活动发送更新。如果我不想我的屏幕也一直闪烁,这意味着我也可以启动其他活动。比如将第二个活动设置为应用程序的后台活动。我对这种编程是新手,所以我希望你能告诉我如何使用这种方法。谢谢

第一项活动

    package com.example.suntracking;

import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.os.Handler;
import android.preference.PreferenceManager;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity implements View.OnClickListener{

    TextView aziangle,elevation,numberof,rightasc,decli,hourangle,solartime,showinlat,showinlong,
    showintimezone,showindlst,showinofftime,showinoffazi,showinoffele,showinoffphi,showinofflamda,showinoffxi,
    showdate,showtime,showday;
    Button editting;
    Float latval,longval,offtimeval,offazival,offeleval,offphival,offlamdaval,offxival;
    int timeval,taketimesec,taketimeminute,taketimehour,takedateday,takedatemonth,takedateyear;
    String show1,show2,show3,show4,sshowday,takeampmtext;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initialize();
        loadSavedpreferences();
    }


    private void initialize() {
        // TODO Auto-generated method stub
        aziangle=(TextView)findViewById(R.id.tvAziAngle);
        elevation=(TextView)findViewById(R.id.tvElevation);
        numberof=(TextView)findViewById(R.id.tvNumberof);
        rightasc=(TextView)findViewById(R.id.tvRightAsc);
        decli=(TextView)findViewById(R.id.tvDecli);
        hourangle=(TextView)findViewById(R.id.tvHourAngle);
        solartime=(TextView)findViewById(R.id.tvSolarTime);
        showday=(TextView)findViewById(R.id.tvDay);
        showdate=(TextView)findViewById(R.id.tvDate);
        showtime=(TextView)findViewById(R.id.tvTime);
        showinlat=(TextView)findViewById(R.id.tvShowInLat);
        showinlong=(TextView)findViewById(R.id.tvShowInLong);
        showintimezone=(TextView)findViewById(R.id.tvShowInTimeZone);
        showindlst=(TextView)findViewById(R.id.tvShowInDLST);
        showinofftime=(TextView)findViewById(R.id.tvShowInOffTime);
        showinoffazi=(TextView)findViewById(R.id.tvShowInOffAzimuth);
        showinoffele=(TextView)findViewById(R.id.tvShowInOffElevation);
        showinoffphi=(TextView)findViewById(R.id.tvShowInOffphi);
        showinofflamda=(TextView)findViewById(R.id.tvShowInOfflamda);
        showinoffxi=(TextView)findViewById(R.id.tvShowInOffxi);
        editting=(Button)findViewById(R.id.bedit);
        editting.setOnClickListener(this);
        }


    private void loadSavedpreferences() {
        // TODO Auto-generated method stub
        SharedPreferences savedata= getSharedPreferences("savealldata",0);

        sshowday=savedata.getString("daytext",null);
        showday.setText(sshowday);

        takedateday=savedata.getInt("dateday",00);
        takedatemonth=savedata.getInt("datemonth", 00);
        takedateyear=savedata.getInt("dateyear", 00);
        showdate.setText(takedateday + "/" + takedatemonth + "/" + takedateyear);

        taketimesec=savedata.getInt("timesec", 00);
        taketimeminute=savedata.getInt("timeminute", 00);
        taketimehour=savedata.getInt("timehour", 00);
        takeampmtext=savedata.getString("ampmtext", "AM");
        showtime.setText(taketimehour + ":" + taketimeminute + ":" + taketimesec + takeampmtext);

        show1=savedata.getString("show1",null);
        latval=savedata.getFloat("latval", 0);
        showinlat.setText("Latitude : " + latval + ", " + show1);

        show2=savedata.getString("show2",null);
        longval=savedata.getFloat("longval",0);
        showinlong.setText("Longitude : " + longval + ", " + show2);

        show3=savedata.getString("show3",null);
        timeval=savedata.getInt("timezoneval",0);
        showintimezone.setText("Time Zone : " + timeval + show3);

        show4=savedata.getString("show4","No");
        showindlst.setText("Daylight Saving Time : "+ show4);

        offtimeval=savedata.getFloat("show5",0);
        showinofftime.setText("Offset Time : " + offtimeval);

        offazival=savedata.getFloat("show6",0);
        showinoffazi.setText("Offset Azimuth : "+ offazival);

        offeleval=savedata.getFloat("show7",0);
        showinoffele.setText("Offset Elevation : " + offeleval);

        offphival=savedata.getFloat("show8", 0);
        showinoffphi.setText("Offset Φ :" + offphival);

        offlamdaval=savedata.getFloat("show9", 0);
        showinofflamda.setText("Offset λ : "+offlamdaval);

        offxival=savedata.getFloat("show10", 0);
        showinoffxi.setText("Offset ξ : "+ offxival);

    }





    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        Intent e=new Intent(MainActivity.this, Parameterlist.class);
        startActivity(e);
    }



    /*private void savePreferences(String string, String value) {
        // TODO Auto-generated method stub
           SharedPreferences savedata = getApplicationContext().getSharedPreferences(
                   "savealldata", MODE_PRIVATE);
        Editor editor=savedata.edit();
        editor.putString("show1", show1);
        editor.commit();
    }*/




    /*@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode==RESULT_OK){
        loadSavedpreferences();
        //Bundle getanswer=data.getExtras();
        //show1=getanswer.getString("showloc1");
        //latval=getanswer.getFloat("anslatitudevalue");
        //showinlat.setText("Latitude is : " + latval + ", " + show1);
        //show2=getanswer.getString("Floatiloc");
        //Floatval=getanswer.getFloat("ansFloatitudevalue");
        //showinFloat.setText("Latitude is : " + Floatval + ", " + show2);
        }
    }*/



}
第二项活动

    package com.example.suntracking;

import java.util.Calendar;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.os.Handler;

public class TimeClock extends Activity{

    int timesec,timeminute,timehour,dateday,datemonth,dateyear,day,ampm;
    String daytext,ampmtext;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        //do anything
        Calendar c = Calendar.getInstance();
        timesec = c.get(Calendar.SECOND);
        timeminute = c.get(Calendar.MINUTE);
        timehour = c.get(Calendar.HOUR);
        ampm = c.get(Calendar.AM_PM);
        if(ampm==0){
            ampmtext="AM";
        }else {
            ampmtext="PM";
        }
        dateday = c.get(Calendar.DAY_OF_MONTH);
        datemonth = c.get(Calendar.MONTH);
        datemonth += 1;
        dateyear = c.get(Calendar.YEAR);
        day = c.get(Calendar.DAY_OF_WEEK);
        switch(day){
        case 1:
            daytext="SUNDAY";
            break;
        case 2:
            daytext="MONDAY";
            break;
        case 3:
            daytext="TUESDAY";
            break;
        case 4:
            daytext="WEDNESDAY";
            break;
        case 5:
            daytext="THURSDAY";
            break;
        case 6:
            daytext="FRIDAY";
            break;
        case 7:
            daytext="SATURDAY";
            break;
        }
        savePreferences();
        Intent i= new Intent(TimeClock.this,MainActivity.class);
        startActivity(i);
        finish();

    }

    private void savePreferences() {
        // TODO Auto-generated method stub
        SharedPreferences savedata = getSharedPreferences("savealldata",0);
        Editor editor=savedata.edit();
        editor.putInt("timesec",timesec);
        editor.putInt("timeminute", timeminute);
        editor.putInt("timehour", timehour);
        editor.putInt("dateday", dateday);
        editor.putInt("datemonth", datemonth);
        editor.putInt("dateyear", dateyear);
        editor.putInt("ampm", ampm);
        editor.putString("daytext", daytext);
        editor.putString("ampmtext", ampmtext);
        editor.commit();
    }

}
编辑:最新编码

package com.example.suntracking;

import java.util.Calendar;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.os.Handler;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity implements View.OnClickListener{
    //showing input and output
    TextView aziangle,elevation,numberof,rightasc,decli,hourangle,solartime,showinlat,showinlong,
    showintimezone,showindlst,showinofftime,showinoffazi,showinoffele,showinoffphi,showinofflamda,showinoffxi,
    showdate,showtime,showday;

    Button editting;
    Float latval,longval,offtimeval,offazival,offeleval,offphival,offlamdaval,offxival;
    int timeval,taketimesec,taketimeminute,taketimehour,takedateday,takedatemonth,takedateyear;
    String show1,show2,show3,show4,sshowday,takeampmtext;
    //for clock
    int timesec,timeminute,timehour,dateday,datemonth,dateyear,day,ampm;
    String daytext,ampmtext,showazi,showele,shownoday,showra,showdecli,showh_angle,shows_time;
    Handler mHandler = new Handler();
    Runnable r;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initialize();
        loadSavedpreferences();
        r = new Thread(new Runnable() {
            @Override
            public void run() {
                // TODO Auto-generated method stub
                while (true) {
                    try {
                        Thread.sleep(1000);
                        mHandler.post(new Runnable() {

                            @Override
                            public void run() {
                                // TODO Auto-generated method stub
                                // Write your code here to update the UI.
                               Save_fetchPref();
                               run_cal();

                            }

                            private void run_cal() {
                                // TODO Auto-generated method stub
                                Intent j=new Intent(MainActivity.this,Calculation.class);
                                startActivity(j);
                            }

                            private void Save_fetchPref() {
                                // TODO Auto-generated method stub
                                    Calendar c = Calendar.getInstance();
                                            timesec = c.get(Calendar.SECOND);
                                            timeminute = c.get(Calendar.MINUTE);
                                            timehour = c.get(Calendar.HOUR_OF_DAY);
                                            ampm = c.get(Calendar.AM_PM);
                                            if(ampm==0){
                                                ampmtext="AM";
                                            }else {
                                                ampmtext="PM";
                                            }
                                            dateday = c.get(Calendar.DAY_OF_MONTH);
                                            datemonth = c.get(Calendar.MONTH);
                                            datemonth += 1;
                                            dateyear = c.get(Calendar.YEAR);
                                            day = c.get(Calendar.DAY_OF_WEEK);
                                            switch(day){
                                            case 1:
                                                daytext="SUNDAY";
                                                break;
                                            case 2:
                                                daytext="MONDAY";
                                                break;
                                            case 3:
                                                daytext="TUESDAY";
                                                break;
                                            case 4:
                                                daytext="WEDNESDAY";
                                                break;
                                            case 5:
                                                daytext="THURSDAY";
                                                break;
                                            case 6:
                                                daytext="FRIDAY";
                                                break;
                                            case 7:
                                                daytext="SATURDAY";
                                                break;
                                            }
                                            savePreferences();
                                            loadSavedpreferences();
                            }
                        });
                    } catch (Exception e) {
                        // TODO: handle exception
                    }
                }
            }
        }).start();


        }


    private void savePreferences() {
        // TODO Auto-generated method stub
        SharedPreferences savedata = getSharedPreferences("savealldata",0);
        Editor editor=savedata.edit();
        editor.putInt("timesec",timesec);
        editor.putInt("timeminute", timeminute);
        editor.putInt("timehour", timehour);
        editor.putInt("dateday", dateday);
        editor.putInt("datemonth", datemonth);
        editor.putInt("dateyear", dateyear);
        editor.putInt("ampm", ampm);
        editor.putString("daytext", daytext);
        editor.putString("ampmtext", ampmtext);
        editor.commit();
    }


    private void initialize() {
        // TODO Auto-generated method stub
        aziangle=(TextView)findViewById(R.id.tvAziAngle);
        elevation=(TextView)findViewById(R.id.tvElevation);
        numberof=(TextView)findViewById(R.id.tvNumberof);
        rightasc=(TextView)findViewById(R.id.tvRightAsc);
        decli=(TextView)findViewById(R.id.tvDecli);
        hourangle=(TextView)findViewById(R.id.tvHourAngle);
        solartime=(TextView)findViewById(R.id.tvSolarTime);
        showday=(TextView)findViewById(R.id.tvDay);
        showdate=(TextView)findViewById(R.id.tvDate);
        showtime=(TextView)findViewById(R.id.tvTime);
        showinlat=(TextView)findViewById(R.id.tvShowInLat);
        showinlong=(TextView)findViewById(R.id.tvShowInLong);
        showintimezone=(TextView)findViewById(R.id.tvShowInTimeZone);
        showindlst=(TextView)findViewById(R.id.tvShowInDLST);
        showinofftime=(TextView)findViewById(R.id.tvShowInOffTime);
        showinoffazi=(TextView)findViewById(R.id.tvShowInOffAzimuth);
        showinoffele=(TextView)findViewById(R.id.tvShowInOffElevation);
        showinoffphi=(TextView)findViewById(R.id.tvShowInOffphi);
        showinofflamda=(TextView)findViewById(R.id.tvShowInOfflamda);
        showinoffxi=(TextView)findViewById(R.id.tvShowInOffxi);
        editting=(Button)findViewById(R.id.bedit);
        editting.setOnClickListener(this);
        }


    private void loadSavedpreferences() {
        // TODO Auto-generated method stub
        SharedPreferences savedata= getSharedPreferences("savealldata",0);
        //input
        sshowday=savedata.getString("daytext",null);
        showday.setText(sshowday);

        takedateday=savedata.getInt("dateday",00);
        takedatemonth=savedata.getInt("datemonth", 00);
        takedateyear=savedata.getInt("dateyear", 00);
        showdate.setText(takedateday + "/" + takedatemonth + "/" + takedateyear);

        taketimesec=savedata.getInt("timesec", 00);
        taketimeminute=savedata.getInt("timeminute", 00);
        taketimehour=savedata.getInt("timehour", 00);
        takeampmtext=savedata.getString("ampmtext", "AM");
        showtime.setText(taketimehour + ":" + taketimeminute + ":" + taketimesec + takeampmtext);

        show1=savedata.getString("show1",null);
        latval=savedata.getFloat("latval", 0);
        showinlat.setText("Latitude : " + latval + ", " + show1);

        show2=savedata.getString("show2",null);
        longval=savedata.getFloat("longval",0);
        showinlong.setText("Longitude : " + longval + ", " + show2);

        show3=savedata.getString("show3",null);
        timeval=savedata.getInt("timezoneval",0);
        showintimezone.setText("Time Zone : " + timeval + show3);

        show4=savedata.getString("show4","No");
        showindlst.setText("Daylight Saving Time : "+ show4);

        offtimeval=savedata.getFloat("show5",0);
        showinofftime.setText("Offset Time : " + offtimeval);

        offazival=savedata.getFloat("show6",0);
        showinoffazi.setText("Offset Azimuth : "+ offazival);

        offeleval=savedata.getFloat("show7",0);
        showinoffele.setText("Offset Elevation : " + offeleval);

        offphival=savedata.getFloat("show8", 0);
        showinoffphi.setText("Offset Φ :" + offphival);

        offlamdaval=savedata.getFloat("show9", 0);
        showinofflamda.setText("Offset λ : "+offlamdaval);

        offxival=savedata.getFloat("show10", 0);
        showinoffxi.setText("Offset ξ : "+ offxival);
        //output
        showazi=savedata.getString("azimuth", null);
        aziangle.setText("Azimuth Angle : " + showazi);

        showele=savedata.getString("elevation", null);
        elevation.setText("Elevation Angle" + showele);

        shownoday=savedata.getString("jd", null);
        numberof.setText("Number of Days : " + shownoday);

        showra=savedata.getString("RA", null);
        rightasc.setText("Right Ascension : " + showra);

        showdecli=savedata.getString("declination", null);
        decli.setText("Declination Angle : " + showdecli);

        showh_angle=savedata.getString("h_angle", null);
        hourangle.setText("Hour Angle : " + showh_angle);

        shows_time=savedata.getString("s_time", null);
        solartime.setText("Solar Time : " + shows_time);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        mHandler.removeCallbacks(run);
        Intent e=new Intent(MainActivity.this, Parameterlist.class);
        startActivity(e);
    }
    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        mHandler.removeCallbacks(run);
    }


}

您可以在ManActivity中使用处理程序每1秒(1000纳秒)更新一次首选项:

现在创建一个线程,并使用while循环使用线程的sleep方法定期执行任务

   Runnable run = new Thread(new Runnable() {
            @Override
            public void run() {
                // TODO Auto-generated method stub
                while (true) {
                    try {
                        Thread.sleep(1000);
                        mHandler.post(new Runnable() {

                            @Override
                            public void run() {
                                // TODO Auto-generated method stub
                                // Write your code here to update the UI.
                               Save_fetchPref();
                            }
                        });
                    } catch (Exception e) {
                        // TODO: handle exception
                    }
                }
            }
        }).start();
    public void Save_fetchPref(){
    Calendar c = Calendar.getInstance();
            timesec = c.get(Calendar.SECOND);
            timeminute = c.get(Calendar.MINUTE);
            timehour = c.get(Calendar.HOUR);
            ampm = c.get(Calendar.AM_PM);
            if(ampm==0){
                ampmtext="AM";
            }else {
                ampmtext="PM";
            }
            dateday = c.get(Calendar.DAY_OF_MONTH);
            datemonth = c.get(Calendar.MONTH);
            datemonth += 1;
            dateyear = c.get(Calendar.YEAR);
            day = c.get(Calendar.DAY_OF_WEEK);
            switch(day){
            case 1:
                daytext="SUNDAY";
                break;
            case 2:
                daytext="MONDAY";
                break;
            case 3:
                daytext="TUESDAY";
                break;
            case 4:
                daytext="WEDNESDAY";
                break;
            case 5:
                daytext="THURSDAY";
                break;
            case 6:
                daytext="FRIDAY";
                break;
            case 7:
                daytext="SATURDAY";
                break;
            }
            savePreferences();
            loadSavedpreferences();
    }
要停止处理程序,请执行以下操作:

onDestry()
{
mHandler.removeCallbacks(run);
}

您可以在开始时将一个布尔值设置为true。 &将其放在处理程序中:

if(running)
{
 Save_fetchPref();
}

在onDestry()中使其运行=false。

为什么不将所有代码放在一个活动中?您可以在UI线程上使用线程、服务和更新UI。我认为这会非常混乱,这就是为什么不这样做的原因。那么这样做更好吗?但是你不认为每秒钟调用一个新活动都会很耗时,或者会填满一堆活动,所以你每次都需要删除它,否则它会加载一些时间,或者也会闪烁屏幕。也许你可以创建这样的方法&在每秒钟都会被调用的线程上调用它。检查我的答案。嗨,谢谢你的例子!它可以工作,但现在它一直在运行和闪烁,即使我已经退出了应用程序。如何确保在我离开应用程序时终止它?我使用了第一个,并将其放入OnDestroy中,但“run”和“run无法解析为变量”出现错误。声明
Runnable r
要全局启动它
Runnable r=new Thread(new r...
&put
mHandler.removeCallbacks(r);
到onDestroy。我在OnCreate下输入了它是否正确?对于runnable函数,现在我得到一个错误,显示“类型不匹配:无法将void转换为runnable”“。我已经全局声明了runnable。我还尝试将所有内容放在OnCreate之外,仍然相同。请使用第二种方法。是否可以显示您的代码?将runnable的名称更改为
r
或除
run
之外的任何名称。”。
if(running)
{
 Save_fetchPref();
}