我有一个应用程序,当它遍历文件系统(每个文件夹一个活动)时,它会递归创建一个活动的多个实例.我在活动堆栈中向前移动时通过Intent检索数据(即正常的文件夹遍历).当我从父文件夹转到子文件夹时,应用程序运行良好.我有问题[返回],因为文件/文件夹列表与前一个活动(孩子)保持一致.我不想再从互联网上检索文件夹数据,因此可以跟踪以前的活动状态吗?这是我活动的一段代码.谢谢
public class RisorseActivity extends DashboardActivity implements Observer {
private Docente docente;
private String get_response;
private String response;
//private HttpsClient client;
private ListView list;
private RelativeLayout progressLayout;
private ProgressBar progressBar;
private TextView txtMateriale;
private ArrayList<Risorsa> risorseList;
private RisorseAdapter risAdapter;
private RisorseList risList;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_risorse);
setTitleFromActivityLabel(R.id.title_text);
list = (ListView) findViewById(R.id.ListRisorse);
list.setClickable(true);
Intent intent = getIntent();
// vengono recuperati i parametri dalla activity chiamante
docente = (Docente) intent.getSerializableExtra(getPackageName() + ".Docente");
//cartella = (Insegnamento) intent.getSerializableExtra(pkg + ".Insegnamento");
get_response …Run Code Online (Sandbox Code Playgroud) 我有三个活动,我们称之为一,二,三.从活动ONE开始,按钮按下开始活动TWO.从活动TWO开始,按钮开始活动三.
很简单.
现在,活动THREE需要从应用程序访问一些数据(可能存在也可能不存在).在THREE的onResume()方法中,检查数据,如果不存在则活动结束,如下所示:
@Override
protected void onResume() {
super.onResume();
/* ... get data from app ... */
if (data == null) {
Toast.makeText(this, "Data not found", Toast.LENGTH_SHORT).show();
finish();
return;
}
/* ... other logic ... */
}
Run Code Online (Sandbox Code Playgroud)
当data == null三,完成,摧毁并返回到TWO.一切都很好.现在在TWO中,按后退按钮调用finish()TWO,但TWO从不调用onDestroy().用户返回到ONE就好了,但是任何后续返回TWO的意图都不起作用并且不会抛出任何错误.TWO处于完成(并暂停)的状态,但从未被破坏,因此无法恢复.
那么,为什么在这种情况下三重要?如果我删除finish()上面代码块中的调用,并依赖于"自然"完成三个(通过使用后退按钮),当用户返回到ONE时,TWO已被正确销毁.
好吧,这里真的让人感到困惑......
保持finish()呼叫到位,我可以通过直接从ONE启动THREE来缓解挂断,然后"自然地"完成它(后退按钮).在THREE被销毁(第二次)之后,TWO按预期打开.
我读过的一切都已经说我应该是确定通话finish()中onResume()的一项活动.但在这种情况下,它会使某些状态处于不良状态,并阻止我破坏呼叫活动.
想法?还是我把你的大脑翻了个遍?
编辑:
进一步的探索发现了这颗宝石......
finish()使用postDelay()大约500毫米的处理程序在THREE 周围调用将允许TWO按预期关闭.像这样:
@Override
protected void onResume() {
super.onResume();
/* ... get data from app …Run Code Online (Sandbox Code Playgroud) 当我通过Intent BundleExtra创建它时,我将一个布尔值传递给我的Activity.现在查看活动生命周期,如果我的活动停止(onStop),那么另一个应用程序需要内存,以便应用程序进程被终止,然后用户导航到activity(onCreate).最后的onCreate会包含我传递的原始布尔值吗?我想如果我想保存布尔值我需要保存它OnSaveInstanceState,对吗?
有人能指出我拍摄照片并使用它存储MVVMCross的例子吗?
我一直在寻找,但只发现了这个:
Monodroid用相机拍照(不实施MVVMCross)
视频录制(这是视频,我无法使其工作:S)
Oficialy配方示例(它工作但不实现MVVMCross)
谢谢!!!
解决!谢谢!
对于未来的参考文献:(使用Master Branch)
对Stuart的信用,我只是改变了代码以适应我的现实
using Cirrious.MvvmCross.ExtensionMethods;
using Cirrious.MvvmCross.Interfaces.Platform.Tasks;
using Cirrious.MvvmCross.Interfaces.ServiceProvider;
using SIGEP.DummyService;
using SIGEP.Mobile.Core.Interfaces;
namespace SIGEP.Mobile.Core.Models
{
public class PhotoService : IMvxServiceConsumer<IMvxPictureChooserTask>
{
private const int MaxPixelDimension = 1024;
private const int DefaultJpegQuality = 92;
public void GetNewPhoto()
{
this.GetService<IMvxPictureChooserTask>().TakePicture(
MaxPixelDimension,
DefaultJpegQuality,
HandlePhotoAvailable,
() => { /* cancel is ignored */ });
}
public event EventHandler<PhotoStreamEventArgs> PhotoStreamAvailable;
private void HandlePhotoAvailable(Stream pictureStream)
{
var handler = PhotoStreamAvailable;
if …Run Code Online (Sandbox Code Playgroud) 我有一个离线在线应用程序,我发现它有一个奇怪的问题,可能不是,但我不明白它.
应用程序要求是,如果互联网可用,即使从启动应用程序或恢复,我调用webservices并在sqlite中存储数据,否则app停留在离线模式,
我有2个活动,第二个活动包含一个id,我通过意图(这一点很重要),
我的问题:
如果我在第二个活动,并且互联网正在运行,我按下主页按钮,然后这第二个活动暂停,然后停止这是Android中的默认行为,我转到设置,关闭wifi,然后再次按应用程序图标回到我的应用程序,这里我感到困惑,我希望我的应用程序现在将在onResume,但是当我在logcat中看到它的onCreated调用和应用程序崩溃时,会发生nullPointerException,因为这个第二个活动没有那个id,我通过了意图..
注意:
如果我使用最近的应用程序按钮进入"设置",然后在turing wifi关闭后再次返回,并重复所有这些行为,然后正常工作,其onResumes称为oncreate ..
我的问题
为什么它会进入onCreate而我的期望是在我从应用程序图标回来时是onResume?
我制作了一个基本的数据记录应用程序,它应该让用户将值输入到动态且通常大量的 EditText 视图中。用户输入完所有数据后,可以按下一个按钮,拍摄数据条目的图片(请耐心等待将输入存储为图片,这样做是有特定原因的),并将图片保存到存储中。
问题: 除了一个特定问题外,它运行得很好。有时,当用户将手机置于空闲状态时(这种情况在实际保存输入之前经常发生),EditText 视图中的所有输入都会被清除(让我成为一个非常生气/悲伤的人)。更重要的是,只有当我在现场并且无法查看 Eclipse 中的日志文件以找出哪些方法可能被调用与正常情况不同时,才会发生这种情况。
问题:为什么当手机进入空闲状态和从空闲状态返回时,我的 EditText 中的值大部分时间都保持不变,但在看似随机(且通常不方便)的情况下它们会清除?
我有一种感觉,这是由于在某些情况下调用 onStop() 而不是 onPause() (或者反之亦然)引起的,但我对这些方法的了解还不够及时。另外,我知道这个问题可以通过共享首选项文件(或一些类似的想法)来解决,但我想知道发生了什么,以便更好地理解。
细节:
-我不确定这些代码中的任何一个是否可能以有意义的方式与该问题相关,但如果有帮助的话,我将包含我的 onCreate() 方法的片段。让我知道是否需要添加其他内容:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_input_param);
Intent intent = getIntent();
//Rest of the code just builds the layout from data taken from the intent
Run Code Online (Sandbox Code Playgroud)
- 除了 onCreate() 之外,我没有重写任何生命周期方法(即 onStop()、onResume() 等)。据我所知,我的活动中的其他方法都不应该与该问题有任何关系
我有一个在 onCreate 中加载片段的 MainActivity。我有另一个从操作栏加载的片段。如果我更改第一个片段的屏幕方向,它会按预期工作。如果我更改第二个片段,它将重置为第一个片段。这似乎是因为它重建了所有内容并将原始片段放回到片段管理器中。我确信有一种方法可以跟踪当前显示的片段,但我不确定如何进行。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Database entries
myDataSource = new FillupDataSource(this);
myDataSource.open();
// Create an instance of the MyListFragment
MyListFragment firstFragment = new MyListFragment();
Bundle bundle = new Bundle();
bundle.putSerializable("dataSource", (Serializable) myDataSource);
firstFragment.setArguments(bundle);
// Add the fragment to the 'fragment_container' FrameLayout
getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, firstFragment).commit();
getActionBar().setDisplayHomeAsUpEnabled(true);
}
Run Code Online (Sandbox Code Playgroud)
我确信这一定是已经做过很多次的事情,但我很难知道如何搜索它。
我的应用程序在特定场景下遇到问题。活动流程如下:
发生的问题是当我将应用程序留在 LoginActivity 中并通过点击主页按钮将应用程序置于后台时。在后台,我会启动尽可能多的其他应用程序,以便让手机内存处于临界状态,并以这种方式强制 Android 系统终止我的活动,以便其他应用程序使用此内存。
当这种情况发生时,我尝试返回仍在打开的应用程序列表中的应用程序,当我这样做时,我读到Android系统重新创建了发生此内存释放时打开的最后一个活动,这就是那一刻当我的应用程序崩溃时,因为它没有存储在内存中的一些数据。
我的问题是,有什么方法可以告诉或配置应用程序,当这种情况发生时,不会重新创建最后一个活动,而是启动我的默认启动器活动(在本例中为 SplashScreenActivity ),该活动通常会预加载所使用的所有必要数据稍后在 LoginActivity 中。
请注意,我不需要我的应用程序每次使用时都启动 SplashScreenActivity 将应用程序置于后台然后返回前台。我需要它仅在 Android 系统终止时启动此默认活动,因为它需要一些内存。
我正在做一个访问gprs的应用程序.当用户启动另一个使用gprs的应用程序时,我也面临着问题,如谷歌地图.它拥有自己的堆内存,在地图应用程序上执行某些操作后,它会调用我服务的OnLowMemory.我的ui也在背景中丧生.我没有得到任何适当的教程haw我可以在onLowMemory中杀死它时启动我的应用程序,或者是否有任何其他方法来处理它.
提前致谢.
每当旋转屏幕时,就会在Activity上调用onCreate方法.是仅仅再次调用onCreate还是重新创建整个活动?