是否可以在不调用新活动的情况下获取对象值?
Posted
技术标签:
【中文标题】是否可以在不调用新活动的情况下获取对象值?【英文标题】:is it possible to fetch the object value without calling a new activity? 【发布时间】:2011-11-08 03:32:20 【问题描述】:我知道调用新活动并使用 putExtra 和 getExtra 函数将对象值从一个活动传递到另一个活动。但我想在不调用的情况下传递值并开始新的活动。可能吗 ? 如果是,请告诉我该怎么做?
【问题讨论】:
【参考方案1】:您也可以使用 Application 类来声明全局变量
class Globalclass extends Application
private String myState;
public String getState()
return myState;
public void setState(String s)
myState = s;
class TempActivity extends Activity
@Override
public void onCreate(Bundle b)
...
MyApp appState = ((MyApp)getApplicationContext());
String state = appState.getState();
...
更新:
查看这个关于如何做到这一点的不错的教程。
Application Class Using as Global
【讨论】:
感谢来自印度的 Suri。但是存储数据呢?请您用存储其他活动数据的方法更新代码吗? 好吧,你可以使用 setState("state set") 以同样的方式存储数据。 这不是存储数据的好方法。我曾经使用这种方法,但它似乎容易出错。例如,如果您以这种方式保存一些数据,然后运行另一个需要大量内存的应用程序,您的应用程序将被终止,并且此全局状态将丢失。 假设我有很多数据。在您的情况下,有多个 myState。现在可以从另一个活动中获取所有状态吗?如果我没有同时使用getter setter方法,那么?? 查看我更新的答案,我在其中提供了一个示例链接。【参考方案2】:为此,您可以使用static variable
或SharedPreferences
,或者如果您的数据量很大,那么您可以使用SQlite
。
【讨论】:
我不想使用 SQLite,因为我已经有了它。那么还有其他替代品吗? 如果您在应用再次启动时不需要该值,请尝试使用静态变量..【参考方案3】:您可以借助 SQLite 之类的数据库,或者您可以使用 Constant 类概念,您可以在其中创建一个公共静态变量并将您的数据存储在一个活动中并在另一个活动中访问。希望这会对您有所帮助。
【讨论】:
【参考方案4】:有很多方法可以将值传递给活动:
您可以将Intent
与FLAG_ACTIVITY_REORDER_TO_FRONT
一起使用。在这种情况下,onNewIntent()
方法将为已启动的活动调用。
您可以使用静态字段或静态方法将新数据传递给您的活动。但这确实不是一个好方法,因为有时应用程序会被终止,即使它在前台并且所有静态数据都丢失了。
您可以使用广播消息将新数据发送到活动。在这种情况下,活动必须注册一个BroadcastReceiver
。
我觉得多编几个方法来传递参数并不是很困难。
【讨论】:
【参考方案5】:您可能想要使用处理程序的 handleMessage() 并在消息中传递对象。
Handler handler = new Handler()
@Override
public void handleMessage(Message msg)
;
然后你可以调用handler.handleMessage(msg),你可以将任何对象分配给msg.onj
【讨论】:
以上是关于是否可以在不调用新活动的情况下获取对象值?的主要内容,如果未能解决你的问题,请参考以下文章
我可以在不显式调用 headObject 的情况下从 S3 对象流中获取 Content-Type 吗?