所以我在尝试设置视图的背景可绘制时有点混乱.该代码依赖于知道视线的高度,所以我不能把它onCreate()或onResume(),因为getHeight()返回0 onResume()似乎是最接近我可以得到虽然.我应该在哪里放置如下所示的代码,以便在显示给用户时背景发生变化?
TextView tv = (TextView)findViewById(R.id.image_test);
LayerDrawable ld = (LayerDrawable)tv.getBackground();
int height = tv.getHeight(); //when to call this so as not to get 0?
int topInset = height / 2;
ld.setLayerInset(1, 0, topInset, 0, 0);
tv.setBackgroundDrawable(ld);
Run Code Online (Sandbox Code Playgroud) 我需要知道用户何时杀死我的应用程序(强制停止).我一直在阅读android生命周期,它具有onStop()和onDestroy()功能,这些与用户在我的应用程序上结束的每个活动相关,但不是在用户强制停止或杀死我的应用程序时.
有没有办法知道用户何时杀死应用程序?
我有一个包含ViewPager的片段.ViewPager与包含一组片段的适配器相关联.
在加载父片段后,我遇到了一条IllegalStateException消息:java.lang.IllegalStateException: Recursive entry to executePendingTransactions.
一些研究使我得出结论,系统无法在另一个片段中显示片段,但是似乎有一些迹象表明可以通过使用ViewPager完成此操作(ViewPager中的一个错误与其他片段一起使用)).
实际上,如果我向我的父片段添加一个按钮,mPager.setAdapter(mAdapter)在按下时调用我的ViewPager,ViewPager会成功加载.这不太理想.
那么问题必须与片段生命周期有关.因此,我的问题是:有没有其他人找到解决这个问题的办法,如果是,怎么办?
有没有办法在片段事务之后延迟ViewPager上的适配器设置?
这是我的父片段代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mView = inflater.inflate(R.layout.team_card_master, container, false);
mViewPager = (ViewPager)mView.findViewById(R.id.team_card_master_view_pager);
final Button button = (Button)mView.findViewById(R.id.load_viewpager_button);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mViewPager.setAdapter(mAdapter);
button.setVisibility(View.GONE);
}
});
mAdapter = new ViewPagerAdapter(getFragmentManager());
// mViewPager.setAdapter(mAdapter);
return mView;
}
Run Code Online (Sandbox Code Playgroud)
和适配器:
public class ViewPagerAdapter extends FragmentPagerAdapter {
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int …Run Code Online (Sandbox Code Playgroud) android android-lifecycle android-fragments android-viewpager android-nested-fragment
我正在从适配器中的演示者请求图像:
@Override
public void onBindViewHolder(SiteAdapter.ViewHolder holder, int position)
{
Site site = sites.get(position);
holder.siteName.setText(site.getName());
requestHolderLogo(holder, site.getLinks().getLogoUrl());
}
private void requestHolderLogo(final ViewHolder holder, final String logoUrl)
{
compositeSubscription.add(
presenter.bitmap(logoUrl)
.subscribe(
bitmap -> {
holder.siteLogo.setImageBitmap(bitmap);
holder.siteLogo.setVisibility(View.VISIBLE);
},
error -> {
holder.siteName.setVisibility(View.VISIBLE);
})
);
}
Run Code Online (Sandbox Code Playgroud)
我应该在ViewHolder重新使用时取消订阅.这很容易.
但是当视图被销毁时如何停止所有订阅?我也应该使演示者引用无效以避免内存泄漏
我有一个ViewModel类,就像在Architecture指南的Connecting ViewModel和repository部分中定义的那样.当我运行我的应用程序时,我得到运行时异常.有谁知道怎么解决这个问题?我应该不注入ViewModel吗?有没有办法告诉使用Dagger创建模型?ViewModelProvider
public class DispatchActivityModel extends ViewModel {
private final API api;
@Inject
public DispatchActivityModel(API api) {
this.api = api;
}
}
Run Code Online (Sandbox Code Playgroud)
引起:java.lang.InstantiationException:java.lang.Class在java.lang.Class.newInstance(Native Method)的android.arch.lifeModelProvider $ NewInstanceFactory.create(ViewModelProvider.java:143)中没有零参数构造函数在Android.arch.lifecycle.ViewModelProvider.get上的android.arch.lifecycle.ViewModelProviders $ DefaultFactory.create(ViewModelProviders.java:143)android.arch.lifecycle.ViewModelProvider.get(ViewModelProvider.java:128)(ViewModelProvider.java) :96)com.example.base.BaseActivity.onCreate(BaseActivity.java:65)at com.example.dispatch.DispatchActivity.onCreate(DispatchActivity.java:53)at android.app.Activity.performCreate(Activity.java: 6682)在android.app.Anstrumentation.callActivityOnCreate(Instrumentation.java:1118)的android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2619)android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2727). android.app.ActivityT上的app.ActivityThread.-wrap12(ActivityThread.java)在android.app.ActivityThread.main上的android.os.Handler.dispatchMessage(Handler.java:102)上的android.os.Looper.loop(Looper.java:154)处获取$ H.handleMessage(ActivityThread.java:1478) (ActivityThread.java:6121)
基本上,这就是我正在做的事情
1)设置AlarmManager以执行BroadcastReceiver(BCR)
Intent intent = new Intent(m_Context, BCR.class);
intent.putExtras(extras);
PendingIntent pendingIntent = PendingIntent.getBroadcast(m_Context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, StartTime, pendingIntent)
Run Code Online (Sandbox Code Playgroud)
2)从BCR启动MyActivity
@Override
public void onReceive(Context context, Intent intent) {
Intent newIntent = new Intent(context, MyActivity.class);
newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
context.startActivity(newIntent);
}
Run Code Online (Sandbox Code Playgroud)
3)如果MyActivity未打开,请将其打开
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD);
getWindow().addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED);
getWindow().addFlags(LayoutParams.FLAG_TURN_SCREEN_ON);
setContentView(R.layout.myactivity);
}
@Overide
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我注意到当MyActivity打开时,它的流程如下:
onCreate/onNewIntent - > onResume - > onPause - > onResume
我不确定为什么它会立即进行onPause.我注意到这只发生在标志打开被筛选时.有谁知道为什么会这样?有什么办法可以防止这种行为?
我有两个活动
MainActivityDeepLinkActivity我设置了所有内容,NavUtils以便像在这里,这里和这里建议一样进行导航.
我想要实现的是:
DeepLinkActivity深层链接开始MainActivity只要我的应用程序在最近的应用程序中有任何任务,一切都很好.
但是,当我从最近的应用程序中删除我的应用程序时,它的行为如下:
DeepLinkActivity深层链接开始我调试了代码,然后发现,NavUtils.shouldUpRecreateTask()返回false.
upIntent将所有内容设置为正常,就像我的Component设置一样.但是,NavUtils.navigateUpTo()行为就像打电话一样finish().没有日志声明,没有.
任何想法,如何解决?
AndroidManifest.xml中
<activity
android:name=".DeepLinkActivity"
android:parentActivityName="my.package.MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="my.package.MainActivity"/>
<intent-filter>
<!-- Some intent filter -->
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
DeepLinkActivity.java
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent upIntent = NavUtils.getParentActivityIntent(this);
if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
// create new …Run Code Online (Sandbox Code Playgroud) 当我将我的应用程序推送到后台,并做一些其他的东西,如whatsapp或短信,onResume它很好.
但是我最近发现,当我的应用程序在后台打开/启动Facebook应用程序时,我不知道会发生什么......
但是onResume,应用程序行为异常......
不要做它需要做的事情,但是当我回到主页并回来它工作正常请帮助我...如何解决它?
包含所有消息的Logcat(不带过滤器)
10-15 12:53:59.899: I/Adreno-EGL(32033): Remote Branch: quic/LNX.LA.3.5.1_RB1.1
10-15 12:53:59.899: I/Adreno-EGL(32033): Local Patches: NONE
10-15 12:53:59.899: I/Adreno-EGL(32033): Reconstruct Branch: AU_LINUX_ANDROID_LNX.LA.3.5.1_RB1.04.04.02.048.018 + f2fd134 + NOTHING
10-15 12:53:59.924: D/OpenGLRenderer(32033): Enabling debug mode 0
10-15 12:54:00.000: V/AlarmManager(7677): sending alarm Alarm{42cfa490 type 3 android}
10-15 12:54:00.110: I/ActivityManager(7677): Displayed uk.org.humanfocus.hfi/.EvaluateTrainingActivity: +838ms
10-15 12:54:00.114: D/WifiStateMachine(7677): handleMessage: E msg.what=151572
10-15 12:54:00.114: D/WifiStateMachine(7677): processMsg: ConnectedState
10-15 12:54:00.114: D/WifiStateMachine(7677): processMsg: L2ConnectedState
10-15 12:54:02.258: V/AlarmManager(7677): sending alarm Alarm{42ebd600 type 1 com.facebook.katana}
10-15 12:54:02.274: V/AlarmManager(7677): sending alarm Alarm{42ec0ff0 …Run Code Online (Sandbox Code Playgroud) android background onresume android-lifecycle android-activity
对不起我的不解,但我是android开发的新手.
我有一个活动A和活动B的应用程序,我从活动A转到活动B.当我离开活动A时,onSaveInstanceState方法被调用,但是当我回到活动A时(来自活动B在同一个应用程序中) ),onCreate方法中的bundle 为null.
我该怎么办,以保存活动A以前的状态?我只想存储应用程序生命周期的数据.
有人可以帮我弄这个吗?
这是我的活动A的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState != null)
{
Log.v("Main", savedInstanceState.getString("test"));
}
else
{
Log.v("Main", "old instance");
}
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState)
{
Log.v("Main", "save instance");
savedInstanceState.putString("test", "my test string");
super.onSaveInstanceState(savedInstanceState);
}
public void buttonClick(View view)
{
Intent intent = new Intent(this, Activity2.class);
startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)
这是我的活动B的代码,当我按下按钮返回活动A:
public void onBack(View view)
{
NavUtils.navigateUpFromSameTask(this);
}
Run Code Online (Sandbox Code Playgroud) android android-lifecycle onrestoreinstancestate onsaveinstancestate
我有以下代码:
MainActivity.java
package com.erc.library;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.FragmentTransaction;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Environment;
import android.os.StrictMode;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Toast;
import com.erc.sayeghlibrary.adapter.TabsPagerAdapter;
public class MainActivity extends FragmentActivity implements
ActionBar.TabListener {
private ViewPager viewPager;
private TabsPagerAdapter mAdapter;
private ActionBar actionBar;
// Tab titles
private String[] tabs = { "Stories", "Dictionaries", "eBooks"};
@Override
protected …Run Code Online (Sandbox Code Playgroud) java android android-lifecycle android-fragments android-viewpager