我经常看到这样的建议:“不要这样做 X,否则你有泄露 Activity/Context 的风险。”
我实际上不知道“泄漏”是什么意思,也不知道如何知道您有泄漏的风险。谁能详细说明一下吗?
在我的应用程序中,我想在显示时显示消息fragment。
我用viewPager和BottomNavBar用于表演4fragments!
我希望在单击BottomNavBar项目时显示fragment,我希望在可见性 fragment 显示消息时显示。
我写下面的代码:
class HomeRegisteredFragment : Fragment() {
lateinit var toolbarTile: TextView
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_home_registered, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
//Initialize
activity?.let {
toolbarTile = it.findViewById(R.id.homePage_toolbarTitle)
}
//Set title
toolbarTile.text = resources.getString(R.string.registered)
context?.let { ContextCompat.getColor(it, R.color.blue_active) }?.let {
toolbarTile.setTextColor(it)
}
}
override fun setUserVisibleHint(isVisibleToUser: …Run Code Online (Sandbox Code Playgroud) 我刚刚在我的游戏中完成了几项活动,现在我开始将它们连接起来使用真实的游戏数据,而不是我用来确保每件作品的测试数据.由于多个活动需要访问此游戏数据,因此我开始研究将此数据传递给我的活动的最佳方法.
我知道将putExtra与intent一起使用,但我的GameData类有相当多的数据而不仅仅是简单的键值对.除了相当多的基本数据类型外,它还有大型数组.我真的不想尝试传递所有这些,除非我可以传递整个对象,而不仅仅是键/数据对.
我读了下面这篇文章,并认为这是要走的路,但到目前为止,我还没有开始工作.
我创建了一个简单的测试应用程序来尝试这个方法,但它一直崩溃,我的代码看起来与上面的帖子看起来一样 - 除了我更改名称.这是我得到的错误.有人能帮助我理解我做错了什么吗?
12-23 00:50:49.762:ERROR/AndroidRuntime(608):引起:java.lang.ClassCastException:android.app.Application
它在以下声明中崩溃:
GameData newGameData = ((GameData)getApplicationContext());
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
package mrk.examples.MainActivity;
import android.app.Application;
public class GameData extends Application {
private int intTest;
GameData () {
intTest = 0;
}
public int getIntTest(){
return intTest;
}
public void setIntTest(int value){
intTest = value;
}
}
Run Code Online (Sandbox Code Playgroud)
//我的主要活动
package mrk.examples.MainActivity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends Activity {
int intLocal;
/** Called when the activity is first created. */
@Override
public …Run Code Online (Sandbox Code Playgroud) 我有以下代码:
public class DumpLocationLog extends Thread {
LocationManager lm;
LocationHelper loc;
public void onCreate() {
loc = new LocationHelper();
lm = (LocationManager) Context.getSystemService(Context.LOCATION_SERVICE);
}
public void run() {
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L, 500.0f, loc);
}
}
Run Code Online (Sandbox Code Playgroud)
我希望它从远程服务运行,但在行中lm = (LocationManager) Context.getSystemService(Context.LOCATION_SERVICE);我得到一个NullPointerException错误,因为它context是null.
我怎样才能获得上下文?getBaseContext()或getApplicationContext()不起作用.
可能重复:
活动上下文和应用程序上下文之间的差异
我想知道之间的实际差异Application Context,并Activity Context在Android..?
这两个让我很困惑.请找我这两个人的区别.
当我使用getApplicationContext()那个时候eclipse给我错误create method 'getApplicationContext()'.请告诉我如何删除此错误.我也尝试使用ClassName.this那个时间错误就像change method startListening(Context) to startListening(Main)
当我使用像:measurement_index = AppSettings.getMeasureUnit(this);
然后错误像:change method getMeasureUnit(Context) to getMeasureUnit(Main)
所以请让我知道如何解决错误:
create方法'getApplicationContext()'
将方法getMeasureUnit(Context)更改为getMeasureUnit(Main)
检查我的代码.
Main.class
public class Main extends Fragment implements GPSCallback{
.......
public static Fragment newInstance(int position) {
Main f = new Main();
Bundle args = new Bundle();
...
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final ViewGroup root = (ViewGroup) inflater.inflate(R.layout.main, null);
/*Intent in = new Intent(Main.this,MainDisplay.class);
// ------------> Here …Run Code Online (Sandbox Code Playgroud) 我遇到了一个奇怪的情况,即从服务或MainActivity向LocalBroadcastManager注册一个intent接收器,当从PHONE_STATE接收器发送intent(在AndroidManifest.xml中定义)时,它从未收到过.
从活动|服务发送相同意图的"自我测试" - 起作用.
是否值得尝试指定LocalBroadcastManager通过AndroidManifest.xml接收的意图?
服务定义为:
<service
android:name=".AppService"
android:process=":remote">
<intent-filter>
<action android:name="me.cmp.app.AppService" />
</intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)
在服务中:
public class AppService extends Service {
@Override
public void onCreate() {
super.onCreate();
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter("me.cmp.app.statechange"));
// self-test uses same intent sending code:
Intent intent2 = new Intent("me.cmp.app.statechange");
intent2.putExtra("message", "selfsend");
LocalBroadcastManager.getInstance(this).sendBroadcastSync(intent2);
}
...
Run Code Online (Sandbox Code Playgroud)
在清单中:
<receiver android:name="me.cmp.app.PhoneReceiver" >
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" >
</action>
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
监听器:
public class PhoneReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle extras = intent.getExtras();
if (extras …Run Code Online (Sandbox Code Playgroud) 我有下面的代码可以在Android 5.0和6.0中正常运行,但是如果我在Android 4.4设备上使用此应用程序,则应用程序将崩溃。请帮我解决问题。下面是我的代码
if (Build.VERSION.SDK_INT > 20) {
packageName = mActivityManager.getRunningAppProcesses().get(1).processName;
} else {
packageName = mActivityManager.getRunningTasks(1).get(0).topActivity.getPackageName();
}
Log.e("Package : ", "" + packageName);
Run Code Online (Sandbox Code Playgroud)
出现这样的错误,
E / AndroidRuntime:致命例外:主进程:com.keyboardsample,PID:23694 android.content.ActivityNotFoundException:找不到用于处理Intent的活动{act = android.intent.action.SEND typ = image / png flg = 0x1 pkg = com 。。 Activity.java:3424)位于com。android.app.Activity.startActivity(Activity.java:3627)位于android.app.Activity.startActivity(Activity.java:3627)位于com。在android.widget.AdapterView.performItemClick(AdapterView.java:299)处的keyboardsample.PhotoActivity $ 1.onItemClick(PhotoActivity.java:80)在android.widget.AbsListView.performItemClick(AbsListView.java:1113)位于android.widget.AbsListView $ PerformClick.run(AbsListView.java:2911)位于android.widget.AbsListView $ 3.run(AbsListView.java:3645)位于android.os.Handler.handleCallback(Handler.java:733)在android.os.Handler.dispatchMessage(Handler.java:95)在android.os.Looper.loop(Looper.java:136)在android.app.ActivityThread.main(ActivityThread.java:5001),位于java.lang.reflect.Method.invokeNative(本地方法),位于com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java.lang.reflect.Method.invoke(Method.java:515)处。 java:785)位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)位于dalvik.system.NativeStart.main(本地方法)com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:785)处com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)处dalvik.system.NativeStart .main(本机方法)com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:785)处com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)处dalvik.system.NativeStart .main(本机方法)
我已经为Fragment定义了下一个标题:
public class AllVideosFragment extends Fragment implements AutomaticCallback{
Run Code Online (Sandbox Code Playgroud)
在此片段的内部,我有下一个处理微调器的功能:
// Listener called when spinner item selected
spinnerLanguages.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View v, int position, long id) {
// Get selected row data to show on screen
String language = ((TextView) v.findViewById(R.id.tvSpinnerRow)).getText().toString();
if(language.equals(getString(R.string.str_en)))
Hawk.put(Config.TV_LANGUAGE, "en");
if(language.equals(getString(R.string.str_es)))
Hawk.put(Config.TV_LANGUAGE, "es");
//We need to retrive data again
new AutomaticRequest().getLives(String.valueOf(Hawk.get(Config.TV_LANGUAGE)), **CONTEXT OF THE CALLBACK**);
}
@Override
public void onNothingSelected(AdapterView<?> parentView) {
// your code here
}
});
Run Code Online (Sandbox Code Playgroud)
如果在微调柄方法之外使用该方法,则可以使用“ this”,但在内部我不知道需要使用什么。
new AutomaticRequest().getLives(String.valueOf(Hawk.get(Config.TV_LANGUAGE)), …Run Code Online (Sandbox Code Playgroud) 我getContext()在哪里可以访问Fragment?我的意思是,它不是null,可以使用(例如,用于控件创建)。是不是onAttach,onCreateView还是onActivityCreated?
android ×10
android-context ×10
definition ×1
fragment ×1
kotlin ×1
location ×1
package ×1
service ×1