Warm tip: This article is reproduced from serverfault.com, please click

java-将数据从服务转移到活动

(java - Tranfer Data from service to activity)

发布于 2020-12-01 10:38:31

当用户杀死应用程序时,我的服务在后台运行。它具有一个可让我返回到 map活动的按钮。但是,当用户在销毁应用程序后通过通知按钮返回到应用程序时,创建的 map已创建,但我从服务转移到我的 map活动的信息为空。

当用户没有杀死应用程序并通过通知按钮返回时,数据就存在了。

这是我的代码:

//Map Activity

        //OnPause = transfer the data to service intent(Working fine)

        BackgroundLocation backgroundLocation = new BackgroundLocation();
        mServiceIntent = new Intent(this, backgroundLocation.getClass());

        if (!isMyServiceRunning(backgroundLocation.getClass())) {

            mServiceIntent.putExtra("AddressBackgound",mAddress);
            mServiceIntent.putExtra("AddressLatBackgound",destinationLat);
            mServiceIntent.putExtra("AddressLngBackgound",destinationLng);

            startService(mServiceIntent);
        }


           // OnMapReady = Getting the data from service intent(return null for all data)

            if (myLocation != null) {

                BackgroundLocation backgroundLocation = new BackgroundLocation();
                mServiceIntent = new Intent(this, backgroundLocation.getClass());

                Bundle extras = getIntent().getExtras();

                if (isMyServiceRunning(backgroundLocation.getClass()) && extras != null) {

                    String mAddress2 = extras.getString("AddressBackgound22");
                    Double destinationLat2 = extras.getDouble("AddressLatBackgound22");
                    Double destinationLng2 = extras.getDouble("AddressLngBackgound22");

                    Log.e("onResume", "onResume stats");
                    Log.e("Address", "" + mAddress2);
                    Log.e("Lat", String.valueOf(destinationLat2));
                    Log.e("Lng", String.valueOf(destinationLng2));

                    Log.e("OnMapReady","Service is running....");

                }
                else{

                     Log.e("OnMapReady","Service is not running");

                }
          }

后台位置(服务意图)=从MapsActivity获取信息,并将信息也返回给MapsActivity。

//Service Intent 

// OnStartCommand



        Bundle extras = intent.getExtras();

        if (extras != null) {

//getting the data to the service is working fine even when the app killed the service still working with the data.

            mAddress = extras.getString("AddressBackgound");
            destinationLat = extras.getDouble("AddressLatBackgound");
            destinationLng = extras.getDouble("AddressLngBackgound");


            //This is what I am trying to send to MapsActivity:

            extras.putString("AddressBackgound22",mAddress);
            extras.putDouble("AddressLatBackgound22",destinationLat);
            extras.putDouble("AddressLngBackgound22",destinationLng);


            Log.e("onStartCommand", "onStartCommand started");

            Log.e("Address","" + mAddress);
            Log.e("Lat",  "" + destinationLat);
            Log.e("Lng",  "" + destinationLng);


        }

感谢你的时间。

Questioner
Mr.Goomer
Viewed
0
Mohammadreza 2020-12-01 19:10:06

我有很多方法,其中一些是这样说的:

1-使用服务中的存储数据(例如SharedPrefrences,DB和...)并检索活动

2-使用事件总线或广播接收器

3-使用回调模式从服务到活动的回调数据