Articles of android activity

当直接从通知启动活动时,如何构建Android后备栈?

我有两个活动: 活动A – 项目清单 活动B – 项目的详细视图 通常,用户打开应用程序并启动活动A. 用户查看项目列表,单击一个项目,然后启动活动B以显示项目详细信息。 也可以通过单击通知直接启动活动B. 在这种情况下,没有后栈。 如何才能使活动B直接从通知启动时,用户可以单击“返回”按钮并转到活动A?

最简单的Android活动生命周期

我注意到Android开发者活动部分自我启动应用程序以来已经更新,但我仍然不清楚最简单的活动生命周期是什么。 据我所知: onCreate,onResume和onPause是必不可少的。 在onPause之后的任何时候都可以删除活动,因此我应该将整个应用程序状态保存到onPause文件中,而不是依赖onStop或onDestroy。 此外,onSaveInstanceState在每个onPause之前都没有被调用,因此不值得使用。 而不是尝试编写大量代码来处理所有场景,为什么不在onPause结束时销毁Activity? 然后,生命周期将在onCreate和onResume处于活动状态之前,然后在其变为非活动状态时为onPause。 不需要其他方法。 我使用onCreate调用setContentView并设置视图侦听器,但其他所有内容都将放在onResume中,包括从文件中加载恢复的状态? 如前所述,onPause会将状态保存到文件中并销毁活动。 据我所知,唯一的缺点可能是当屏幕上显示popup窗口时,活动将被删除,并且必须在popup窗口关闭时重新创建,这意味着活动将不会在popup窗口后面显示(尽管我没有测试过这个) 重新启动活动可能需要更长的时间,但由于系统可能在没有任何通知的情况下删除了活动,因此无论如何都必须保存整个状态。 有什么想法吗? 更新:我想我想到的是“首页”活动所谓的游戏活动。 当玩家点击“播放”时,首页活动会调用游戏活动 游戏活动将在onCreate中设置其视图和监听器等,并且在onResume中它将加载包含游戏状态的文件,或者如果不存在文件则开始新游戏。 onPause游戏,它将游戏状态写入文件,然后无论游戏活动发生什么(没有,或被停止/销毁,或其他),onResume方法将始终从文件中重新加载所有数据。 这有点像我在想的,如果这有道理的话? 更新2:我已经设计了一个简单的解决方案,我已在下面的答案中记录,如果有人感兴趣的话! 它不支持Android Activity Lifecycle’Paused’和’Stopped’状态。 一旦它不再显示它就会自动杀死并且必须手动重启,但它会从你离开的地方继续运行!

Espresso如何测试Activity是否完成?

我想声明我正在测试的Acitivty在执行某些操作时已完成。 不幸的是到目前为止,我只是通过在测试结束时添加一些睡眠来断言它。 有没有更好的办法 ? import android.content.Context; import android.os.Build; import android.support.test.rule.ActivityTestRule; import android.test.suitebuilder.annotation.LargeTest; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import static org.junit.Assert.assertTrue; @SuppressWarnings(“unchecked”) @RunWith(JUnit4.class) @LargeTest public class MyActivityTest { Context context; @Rule public ActivityTestRule activityRule = new ActivityTestRule(MyActivity.class, true, false); @Before public void setup() { super.setup(); // … } @Test public void […]

如何区分是否将onDestroy()作为配置更改序列的一部分进行调用?

在我的Activity中,需要在onDestroy()中销毁一些外部事物(服务)。 但是当配置发生变化时(例如键盘翻转),我不希望这样,因为它会立即恢复。 所以问题是:如何区分onDestroy()是否是由Back-key press或部分配置更改过程引起的? 在@ CommonsWare的回答之后它会非常简单)类似于: @Override onDestroy() { if (mIsChangeConfig == true) { mIsChangeConfig = false: } else { stopService(); } } @Override onRetainNonConfigurationInstance() { mIsChangeConfig = true; }

多次阻止打开活动

我的应用程序上有一个带图标的常用菜单。 单击图标将启动活动。 有没有办法知道某个活动是否已经在运行并阻止它多次启动(或从多个条目启动)? 我也可以将处于onPause状态的活动带到前面吗?

为什么我的Activity会扩展ActionBarActivity?

我下载了最新的SDK版本,当我创建一个新的Android项目时,自动生成的MainActivity扩展了ActionBarActivity ,但我想扩展Activity 。 public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() .add(R.id.container, new PlaceholderFragment()).commit(); } } @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 […]

确定上下文是否为特定活动

我将Activity上下文传递给对话框,但该对话框对于其他活动是全局的,因此其他活动也可能创建该对话框。 我的问题是如何确定Activity上下文是一个特定的Activity? 我正在传递ActivityContext,如下所示: private Activity ActivityContext; public MessageDialog(Activity context,int DialogStyle,int Dialog_Layout,String Msg) { super(context,DialogStyle,Dialog_Layout); this.ActivityContext = context; this.Msg = Msg; }

每项活动都必须有布局吗?

我刚刚开始使用Android并正在阅读BroadcastReceiver。 由于MainActivity仅用于以秒为单位获取闹钟时间,因此我想到布局XML文件是否必须适用于Android中的每个活动。 我的意思是,有没有可能有一个应用程序,在启动时,显示没有视图,但成功设置接收器?

Android:使用参数启动服务

要从Activiy启动我的服务,我使用startService(MyService.class) 。 这很好用,但在特殊情况下,服务应该以不同的方式启动。 我想将一些parameter passing给服务启动。 我在我的活动中尝试了以下内容: Intent startMyService= new Intent(); startMyService.setClass(this,LocalService.class); startMyService.setAction(“controller”); startMyService.putExtra(Constants.START_SERVICE_CASE2, true); startService(startMyService); 在我的服务中我使用: public class MyIntentReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(“controller”)) { // Intent was received } } } IntentReceiver在onCreate()中注册如下: IntentFilter mControllerIntent = new IntentFilter(“controller”); MyIntentReceiver mIntentReceiver= new MyIntentReceiver(); registerReceiver(mIntentReceiver, mControllerIntent); 使用此解决方案,服务启动但未收到意图。 如何启动服务并传递参数? 谢谢你的帮助!

v4带活动的getFragmentManager – 不兼容的types

我有一个按预期运行的简单活动。 import android.app.Activity; import android.app.FragmentManager; // import android.support.v4.app.FragmentManager; import android.os.Bundle; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // FragmentManager fm = getSupportFragmentManager(); // ActionBarActivity FragmentManager fm = getFragmentManager(); // Activity } } 然后我换了 import android.app.FragmentManager; 同 import android.support.v4.app.FragmentManager; 所以我可以支持我的旧设备..但是,这报告错误: Incompatible types. Required: android.support.v4.app.FragmentManager Found: android.app.FragmentManager 我在这做错了什么? 我find的流行解决方案是使用getSupportFragmentManager(),但这仅适用于ActionBarActivites [编辑 – […]