Questions tagged «android-activity»

有关在Android中创建或管理“活动”的问题。在Android应用程序中,活动是提供用户界面的组件,允许用户执行某些操作。简单的例子是:拨打电话,拍照,发送电子邮件或查看地图。

10
Android应用内存不足的问题-尝试了一切,但仍然很茫然
我花了整整4天的时间竭尽所能找出我正在开发的应用程序中的内存泄漏,但是很久以前事情就没有了。 我正在开发的应用具有社交性质,因此请考虑对活动(P)进行配置,并列出带有数据的活动-例如徽章(B)。您可以从个人资料跳到徽章列表,其他个人资料,其他列表等。 因此,假设像这样的流程P1-> B1-> P2-> B2-> P3-> B3,等等。为了保持一致,我正在加载同一用户的配置文件和徽章,因此每个P页面都是相同的,因此每个B页。 问题的基本要点是:在导航了一段时间之后,根据每个页面的大小,我在随机的位置(位图,字符串等)收到了内存不足的异常,这似乎并不一致。 在尽一切可能找出导致内存不足的原因之后,我什么都没想到。我不明白的是,如果Android在加载时内存不足而崩溃,为什么Android不会杀死P1,B1等。如果我曾经通过onCreate()和onRestoreInstanceState()返回到这些早期活动,我希望它们会死掉并复活。 更不用说了-即使我执行P1-> B1->后退-> B1->后退-> B1,我仍然会崩溃。这表明存在某种内存泄漏,但是即使在转储hprof并使用MAT和JProfiler之后,我也无法查明。 我已禁止从网络上加载图像(并增加了加载的测试数据来弥补它并使测试公平),并确保图像缓存使用SoftReferences。Android实际上试图释放它拥有的一些SoftReference,但要在它崩溃到内存不足之前。 徽章页面从Web获取数据,将其从BaseAdapter加载到EntityData数组中,然后将其提供给ListView(我实际上是在使用CommonsWare的出色MergeAdapter,但是在此Badge活动中,无论如何实际上只有1个适配器,但是我想以任何一种方式提及这个事实)。 我遍历了代码,却找不到任何可能泄漏的内容。我清除并清空了所有可以找到的内容,甚至将System.gc()左右移走,但应用程序仍然崩溃。 我仍然不明白为什么堆栈中不活动的活动不会获得收益,我真的很想弄清楚这一点。 在这一点上,我正在寻找任何提示,建议,解决方案……任何可能有用的方法。 谢谢。

4
使用startActivityForResult,如何在子活动中获取requestCode?
我有四个活动,分别是A,B,C和D。我的情况是A将通过startActivityForResult启动活动B。 startActivityForResult(new Intent(this,B.class),ONE); 在其他情况下,我将与其他情况一起发生。喜欢 startActivityForResult(new Intent(this,B.class),TWO); 在B中,我需要根据requestCode调用C或D。即如果一个人需要启动C否则D。 因此,我需要知道如何检查子Activity(此处为B)中的requestCode。 换句话说,我想获取活动B的开始请求代码。

3
Android singleTask或singleInstance启动模式?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 1年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我有一个以列表为主要活动的应用程序,然后您可以单击项目,以打开该项目的详细视图。我也有一个与主要活动类似的搜索活动,并且按预期工作。 但是,我希望此搜索活动在堆栈中只有一个实例,以便用户可以搜索多次,然后单击“返回”将使它们返回到开始搜索之前所处的先前视图(而不是返回先前的搜索结果) singleTask和singelInstance启动模式似乎都可以执行我想要的操作,因此我不确定应为此使用哪一个,为什么?

10
您如何使用Intent.FLAG_ACTIVITY_CLEAR_TOP清除活动堆栈?
我已经阅读了有关使用此功能的几篇文章,但一定会丢失一些东西,因为它对我不起作用。我的活动A在清单中有launchmode =“ singleTop”。它以launchmode =“ singleInstance”启动活动B。活动B打开浏览器并接收并返回意图,这就是为什么它是singleInstance的原因。我试图覆盖“后退”按钮,以便将用户发送回活动A,然后可以按“上一步”离开活动,而不是再次返回活动B。 // activity B @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.ECLAIR && keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) onBackPressed(); return super.onKeyDown(keyCode, event); } @Override public void onBackPressed() { startActivity(new Intent(this, UI.class) .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK)); return; } 从浏览器返回后,堆栈为... A,B,Browser,B 我希望此代码将堆栈更改为... A …

3
android.intent.action.MAIN是什么意思?
我看到了许多不同的令人困惑的赞美诗。 <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> 是什么意思 <action android:name="android.intent.action.MAIN" /> 和 <category android:name="android.intent.category.LAUNCHER" /> 和 <category android:name="android.intent.category.DEFAULT" />


1
Android:捕获活动的返回
我对启动新活动有疑问。归结为这一点。我在视图上有3个标签 A) contains gMap activity B) camera activity C) some random text fields. 要求是应用程序以纵向模式运行。 除Camera Preview Surface(B)以外,所有3个选项卡均可按预期工作。将其旋转90度。他们唯一能使它正确的方法是将应用程序设置为横向模式,从而使我的所有选项卡乱七八糟,几乎是行不通的。 我的解决方案是:替换 我的相机活动中有一个常规活动为空,但没有 Intent i = new Intent(this,CameraActivity.class); startActivity(i); 这将启动我的CameraActivity。那很好。我必须进行线性布局,并包含3张看起来像真实标签的图像,因此我可以尝试模拟标签的操作,同时将屏幕旋转为横向,并使视觉效果保持为纵向。用户可以单击其中一个图像(按钮)以显示下一个选项卡。这是我的问题。它应退出我的“相机活动”,然后返回至标签中的“空白活动”,在此处应解释为单击图像中所需的标签。 最主要的是,当它返回时,它返回到选项卡下的空白(黑色)页面(因为它是“空”)。如何将返回事件捕获回到调用该活动的页面,然后查看它们执行了什么操作? 我可以设置一个onclicklistener,在其中我可以响应单击的假标签(图像)退出相机活动。退出时,标签应更新,以便您返回。有什么建议么? 谢谢,


3
Android兼容软件包不包含Activity.getFragmentManager()
我开始尝试使用3月3日发布的Android兼容性软件包将片段添加到基于2.1的Android应用中。我将库包含到我的项目中,并开始将代码从基于活动的类迁移到基于片段的类中,但是我注意到Google的Fragment示例似乎依赖于3.0中的Activity类(Honeycomb)具有新方法getFragmentManager()。它似乎是Fragment系统不可或缺的一部分。 我试图在兼容性包库中查找某些包含getFragmentManager()的Activity实施,但找不到。有谁知道我在哪里可以找到getFragmentManager(),以便为蜂窝兼容性添加Fragments,或者如果不知道,我如何不使用FragmentManager就能包含Fragments?


5
活动和片段之间有什么区别?
根据我的研究,backstack的概念及其存在方式存在显着差异: 活动 将activity放到的位置backstack后activities,用户只需按一下back 按钮即可导航回到上一个活动。 Activity 可以独立存在。 分段 将anfragment放置到活动中后,我们必须通过addToBackstack()在期间调用来请求保存实例fragment transaction。 Fragment 必须住在里面 activity 还有其他区别吗?

4
是在onActivityResult()之前调用onResume()吗?
这是我的应用程序的布局方式: 提示onResume()用户登录 如果用户登录,他可以继续使用应用程序 3。如果用户随时注销,我想再次提示登录 我该如何实现? 这是我的MainActivity: @Override protected void onResume(){ super.onResume(); isLoggedIn = prefs.getBoolean("isLoggedIn", false); if(!isLoggedIn){ showLoginActivity(); } } 这是我的LoginActivity: @Override protected void onPostExecute(JSONObject json) { String authorized = "200"; String unauthorized = "401"; String notfound = "404"; String status = new String(); try { // Get the messages array …


4
在Android中使用Bundle代替直接Intent putExtra()的优点
在我的android应用程序中,我始终使用class的直接putExtra()函数Intent将任意数量的值传递给new Activity。 像这样: Intent i = new Intent(this, MyActivity.class); i.putExtra(ID_EXTRA1, "1"); i.putExtra(ID_EXTRA2, "111"); startActivity(i); 我知道Bundle在Android中,而且我已经看到人们正在使用Bundle将值传递给new Activity。 像这样: Intent intent = new Intent(this, MyActivity.class); Bundle extras = new Bundle(); extras.putString("EXTRA_USERNAME","my_username"); extras.putString("EXTRA_PASSWORD","my_password"); intent.putExtras(extras); startActivity(intent); 在这里我有两个疑问。如果可以通过将值直接传递给new来传递值,为什么还要使用? 使用而不是直接的优势是什么?BundleActivityIntentBundleIntent putExtra()

10
无法从活动中调用getSupportFragmentManager()
我有一个有片段的活动。 XML: <fragment android:name="com.example.androidcalculator.ResultFragment" android:id="@+id/result_fragment" android:layout_weight="1" android:layout_width="match_parent" android:layout_height="wrap_content" /> 而且我想从Activity中的方法中调用ResultFragment中的方法,但是getSupportFragmentManager“不存在”: FragmentManager fragMan = getSupportFragmentManager(); 我该如何解决?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.