如何在应用程序的生命周期中创build全局variableskeep keep values而不pipe哪个活动正在运行..
你可以扩展基类android.app.Application
类并添加如下的成员variables:
public class MyApplication extends Application { private String someVariable; public String getSomeVariable() { return someVariable; } public void setSomeVariable(String someVariable) { this.someVariable = someVariable; } }
在您的android清单中,您必须声明实现android.app.Application的类(将android:name=".MyApplication"
属性添加到现有的应用程序标记中):
<application android:name=".MyApplication" android:icon="@drawable/icon" android:label="@string/app_name">
然后在你的活动中,你可以得到和设置这样的variables:
// set ((MyApplication) this.getApplication()).setSomeVariable("foo"); // get String s = ((MyApplication) this.getApplication()).getSomeVariable();
你可以使用单例模式。 喜欢这个:
package com.ramps; public class MyProperties { private static MyProperties mInstance= null; public int someValueIWantToKeep; protected MyProperties(){} public static synchronized MyProperties getInstance(){ if(null == mInstance){ mInstance = new MyProperties(); } return mInstance; } }
在你的应用程序中,你可以用这种方式访问你的单例:
MyProperties.getInstance().someValueIWantToKeep
这个全局variables适用于我的项目
public class Global { public static int ivar1,ivar2; public static String svar1,svar2; public static int[] myarray1=new int[10]; } //How to use other or many activity Global.ivar1=10; int i=Global.ivar1;
您可以使用应用程序首选项 只要传递Context对象,它们就可以从任何活动或代码段访问,而且它们对于使用它们的应用程序来说是私有的,所以您不必担心公开应用程序特定的值,除非处理路由设备。 即使如此,您也可以使用散列或encryptionscheme来保存值。 而且,这些首选项从应用程序运行到下一个应用程序。 这里有一些代码示例,你可以看看。
有几种不同的方式可以实现你所要求的。
1.)扩展应用程序类并在那里实例化你的控制器和模型对象。
public class FavoriteColorsApplication extends Application { private static FavoriteColorsApplication application; private FavoriteColorsService service; public FavoriteColorsApplication getInstance() { return application; } @Override public void onCreate() { super.onCreate(); application = this; application.initialize(); } private void initialize() { service = new FavoriteColorsService(); } public FavoriteColorsService getService() { return service; } }
然后,您可以随时从您的自定义应用程序对象中调用您的单例:
public class FavoriteColorsActivity extends Activity { private FavoriteColorsService service = null; private ArrayAdapter<String> adapter; private List<String> favoriteColors = new ArrayList<String>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_favorite_colors); service = ((FavoriteColorsApplication) getApplication()).getService(); favoriteColors = service.findAllColors(); ListView lv = (ListView) findViewById(R.id.favoriteColorsListView); adapter = new ArrayAdapter<String>(this, R.layout.favorite_colors_list_item, favoriteColors); lv.setAdapter(adapter); }
2)你可以让你的控制器创build一个自己的单例实例:
public class Controller { private static final String TAG = "Controller"; private static sController sController; private Dao mDao; private Controller() { mDao = new Dao(); } public static Controller create() { if (sController == null) { sController = new Controller(); } return sController; } }
然后,您可以从任何Activity或Fragment调用create方法,如果尚不存在,它将创build一个新的控制器,否则将返回预先存在的控制器。
3.)最后,在Square中创build了一个漂亮的框架,它提供了Android中的dependency injection。 它被称为匕首 。 我不会在这里介绍如何使用它,但是如果你需要这样的东西,那就很光滑。
我希望我已经提供了足够的细节,关于你如何能够做到你所希望的。
// My Class Global Variables Save File Global.Java public class Global { public static int myVi; public static String myVs; } // How to used on many Activity Global.myVi=12; Global.myVs="my number"; ......... ........ ........ int i; int s; i=Global.myVi; s=Global.myVs + " is " + Global.myVi;
尝试像这样:
创build一个共享数据类:
SharedData.java
import android.app.Application; /** * Created by kundan on 6/23/2015. */ public class Globals { private static Globals instance = new Globals(); // Getter-Setters public static Globals getInstance() { return instance; } public static void setInstance(Globals instance) { Globals.instance = instance; } private String notification_index; private Globals() { } public String getValue() { return notification_index; } public void setValue(String notification_index) { this.notification_index = notification_index; } }
在要设置/获取数据的类中声明/启动全局类的实例(在onCreate()
方法之前使用此代码): –
Globals sharedData = Globals.getInstance();
设置数据:
sharedData.setValue("kundan");
获取数据:
String n = sharedData.getValue();
我检查了类似的答案,但这里给出的不符合我的需要。 从我的angular度来看,我发现了一些你正在寻找的东西。 唯一可能的黑点是安全问题(或者可能不是),因为我不了解安全性。
我build议使用接口(无需使用构造函数的类,所以…),因为你只需要创build类似于:
public interface ActivityClass { public static final String MYSTRING_1 = "STRING"; public static final int MYINT_1 = 1; }
然后,您可以通过以下方式访问课程中的任何地方:
int myInt = ActivityClass.MYINT_1; String myString = ActivityClass.MYSTRING_1;
你可以像这样创build一个全球化的课程
public class GlobalClass extends Application{ private String name; private String email; public String getName() { return name; } public void setName(String aName) { name = aName; } public String getEmail() { return email; } public void setEmail(String aEmail) { email = aEmail; } }
然后在清单中定义它
<application android:name="com.example.globalvariable.GlobalClass" ....
现在你可以像这样将值设置为glolblevariables
final GlobalClass globalVariable = (GlobalClass) getApplicationContext(); globalVariable.setName("Android Example context variable");
你可以像这样得到这些值
final GlobalClass globalVariable = (GlobalClass) getApplicationContext(); final String name = globalVariable.getName();
请从这个博客全球variablesfind完整的例子
import android.app.Application; public class Globals extends Application { private static Globals instance = null; private static int RecentCompaignID; private static int EmailClick; private static String LoginPassword; static String loginMemberID; private static String CompaignName = ""; private static int listget=0; //MailingDetails private static String FromEmailadd=""; private static String FromName=""; private static String ReplyEmailAdd=""; private static String CompaignSubject=""; private static int TempId=0; private static int ListIds=0; private static String HTMLContent=""; @Override public void onCreate() { super.onCreate(); instance = this; } public static Globals getInstance() { return instance; } public void setRecentCompaignID(int objRecentCompaignID) { RecentCompaignID = objRecentCompaignID; } public int getRecentCompaignID() { return RecentCompaignID; } public void setLoginMemberID(String objloginMemberID) { loginMemberID = objloginMemberID; } public String getLoginMemberID() { return loginMemberID; } public void setLoginMemberPassword(String objLoginPassword) { LoginPassword = objLoginPassword; } public String getLoginMemberPassword() { return LoginPassword; } public void setEmailclick(int id) { EmailClick = id; } public int getEmailClick() { return EmailClick; } public void setCompaignName(String objCompaignName) { CompaignName=objCompaignName; } public String getCompaignName() { return CompaignName; } public void setlistgetvalue(int objlistget) { listget=objlistget; } public int getlistvalue() { return listget; } public void setCompaignSubject(String objCompaignSubject) { CompaignSubject=objCompaignSubject; } public String getCompaignSubject() { return CompaignSubject; } public void setHTMLContent(String objHTMLContent) { HTMLContent=objHTMLContent; } public String getHTMLContent() { return HTMLContent; } public void setListIds(int objListIds) { ListIds=objListIds; } public int getListIds() { return ListIds; } public void setReplyEmailAdd(String objReplyEmailAdd) { ReplyEmailAdd=objReplyEmailAdd; } public String getReplyEmailAdd() { return ReplyEmailAdd; } public void setFromName(String objFromName) { FromName=objFromName; } public String getFromName() { return FromName; } public void setFromEmailadd(String objFromEmailadd) { FromEmailadd=objFromEmailadd; } public String getFromEmailadd() { return FromEmailadd; } }
如果可能的话,应该在文件.so中声明垃圾收集器或操作系统未卸载所需的保持活动状态的variables。要做到这一点,必须通过C / C ++进行编码并编译为.so lib文件,加载它在你的MainActivity。
简单!!!!
那些想作为全局variables访问的variables,可以声明为静态variables。 而现在,你可以通过使用访问这些variables
classname.variablename;
public class MyProperties { private static MyProperties mInstance= null; static int someValueIWantToKeep; protected MyProperties(){} public static synchronized MyProperties getInstance(){ if(null == mInstance){ mInstance = new MyProperties(); } return mInstance; }
}
MyProperites.someValueIWantToKeep;
而已! ;)
以上就是android开发分享Android全局variables相关内容,想了解更多android开发(异常处理)及android游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/addevelopment/523922.html